如果同时从多个线程调用同一个System.Random实例的NextDouble()而没有任何锁定,那么可能会出现哪些错误/问题(如果有的话)?
答案 0 :(得分:4)
简而言之,System.Random
不是线程安全的
如需更长的答案,请参阅this awesome post,详细说明问题。
答案 1 :(得分:1)
你可能会破坏对象。 Random
对象使用种子值的内部数组,并调用Next
更新该数组。
不要这样做。
答案 2 :(得分:1)
由于无法保证线程安全,因此没有明确或明智的方式来回答“无”,“任何事情”和“繁荣”都是有效的答案,实际上它可能会在版本,平台,架构之间发生变化,等
您是否考虑过制作[ThreadStatic],以便每个线程都可以自动拥有一个隔离版本? (每个线程可能需要对初始化进行双重检查)。
答案 3 :(得分:0)
如果没有完全逆向工程的实施,很难说。但是,可能发生的一件事是连续多次返回相同的“随机”数字(跨多个线程)。