小编典典

C#随机数生成器线程安全吗?

c#

C#的Random.Next()方法是线程安全的吗?


阅读 467

收藏
2020-05-19

共1个答案

小编典典

Next实现线程安全性的方法中,没有做任何特殊的事情。但是,这是一个实例方法。如果您不共享Random不同线程之间的实例,则不必担心实例内的状态损坏。在未Random持有某种排他锁的情况下,请勿在不同线程中使用单个实例。

乔恩·斯基特(Jon Skeet)在此主题上有几篇不错的文章:

StaticRandom
重访随机性

正如一些评论员所指出的那样,在使用不同实例时存在另一个潜在问题,这些实例Random是线程独占的,但它们的种子是相同的,因此会产生相同的伪随机数序列,因为它们可能同时创建或在短时间内创建彼此接近。缓解该问题的一种方法是使用主Random实例(由单个线程锁定)来生成一些随机种子,并初始化Random要使用的其他每个线程的新实例。

2020-05-19