多线程Random.NextDouble()

时间:2011-02-28 18:20:44

标签: .net multithreading random generator

如果同时从多个线程调用同一个System.Random实例的NextDouble()而没有任何锁定,那么可能会出现哪些错误/问题(如果有的话)?

4 个答案:

答案 0 :(得分:4)

简而言之,System.Random 不是线程安全的 如需更长的答案,请参阅this awesome post,详细说明问题。

答案 1 :(得分:1)

你可能会破坏对象。 Random对象使用种子值的内部数组,并调用Next更新该数组。

不要这样做。

答案 2 :(得分:1)

由于无法保证线程安全,因此没有明确或明智的方式来回答“无”,“任何事情”和“繁荣”都是有效的答案,实际上它可能会在版本,平台,架构之间发生变化,等

您是否考虑过制作[ThreadStatic],以便每个线程都可以自动拥有一个隔离版本? (每个线程可能需要对初始化进行双重检查)。

答案 3 :(得分:0)

如果没有完全逆向工程的实施,很难说。但是,可能发生的一件事是连续多次返回相同的“随机”数字(跨多个线程)。