PRNG需要线程安全吗?

时间:2009-03-05 20:13:25

标签: thread-safety random prng

只要并发调用不会导致seg-v或返回相同的值,当这些错误的主要影响是不可预测的结果时,有什么理由可以防止PRNGs中的竞争条件和数据损坏,这是PRNG的观点?


编辑:是否有任何PRNG在竞争条件和数据损坏下​​不会受到影响?

3 个答案:

答案 0 :(得分:5)

  

当这些错误的主要影响是无法预测的结果时,这是PRNG的重点?

“随机”与不可预测的不同 - 随机意味着某种分布对于维护非常重要,如果你想要真正的随机数。如果您的随机数可以任何方式预测,则可能是安全问题,或者至少是程序错误

答案 1 :(得分:3)

PRNG是精心构建的工具 - 坦率地说,如果竞争条件和线程错误是一个很好的PRNG,那么实现就是这样写的。

添加线程错误以增加随机性的问题在于它是对生成器的未经研究的更改。已经对现有的安全算法和实现进行了详尽的测试;如果你想尝试一个不安全的变种,你需要做统计学上的咕噜声工作来证明它至少和普通的PRNG一样随机。

答案 2 :(得分:0)

它通常会使它们不那么具有确定性(如果你依赖于它们的确定性会很糟糕,许多人这样做),并且可能会或可能不会使它们伪随机,这取决于它们的特定实现细节和硬件的细微之处行为方式。

但通常人们编写多线程应用程序会在TLS(线程本地存储)中声明其PRNG状态。这种方式并不重要,每个线程都有自己的PRNG,除非你刻意创建它们,否则比赛不会发生。不管怎样,不在PRNG代码内。这是无锁的,或多或少的完整性能(取决于所使用的TLS实现)。