【发布时间】:2014-10-16 08:52:45
【问题描述】:
这是一篇很好的文章,描述了随机数的线程安全:Getting random numbers in a thread-safe way
但我坚持使用“RandomGen2”示例:
public static class RandomGen2
{
private static Random _global = new Random();
[ThreadStatic]
private static Random _local;
public static int Next()
{
Random inst = _local;
if (inst == null)
{
int seed;
lock (_global) seed = _global.Next();
_local = inst = new Random(seed);
}
return inst.Next();
}
}
为什么线程静态字段被复制到局部变量:Random inst = _local; ?为什么不简单地使用
if (_local == null)
....
return _local.Next()
【问题讨论】:
-
重要提示,当你像这样链接随机数生成器时,你可以获得weird side effects。
-
你可以在这里找到一个文档devblogs.microsoft.com/pfxteam/…
标签: c# .net multithreading random thread-safety