【发布时间】:2013-08-07 19:36:46
【问题描述】:
我给自己写了一个多线程随机生成器
public static class MyRandGen
{
private static Random GlobalRandom = new Random();
[ThreadStatic]
private static Random ThreadRandom = new Random(SeedInitializer());
private static int SeedInitializer()
{
lock (GlobalRandom) return GlobalRandom.Next();
}
public static int Next()
{
return ThreadRandom.Next();
}
}
但是,它在触发 Next() 时会引发 NullReferenceException,我不明白。这种初始化 ThreadStatic 字段是否以某种方式被禁止?
我知道我可以每次都检查该字段是否已初始化,但这不是我正在寻找的解决方案。
【问题讨论】:
-
您的代码对我来说无一例外。 VS2010\4.0
-
为什么不使用线程安全的
Rngcryptoserviceprovider -
我正在寻找一种比简单锁定更快的方法 - Rngcryptoserciveprovider 比这慢几倍。我将了解 Lazy
,以为我仍然不知道为什么我的方法不起作用。
标签: c# random thread-safety threadstatic