1. ホーム
  2. c#

[解決済み] C# Random Number Generatorはスレッドセーフか?

2023-02-21 08:37:10

質問

C#の Random.Next() メソッドはスレッドセーフですか?

どのように解決するには?

には特に何もしていません。 Next メソッドでは、スレッドセーフを実現するために特別なことはしていません。しかし、これはインスタンスメソッドです。のインスタンスを共有しないのであれば Random のインスタンスを異なるスレッド間で共有しないのであれば、 インスタンス内の状態の破壊を心配する必要はないでしょう。 のインスタンスは使用しないでください。 Random のインスタンスを使用しないでください。

Jon Skeetはこのテーマについていくつかの素晴らしい投稿をしています。

StaticRandom

ランダム性の再検討

いくつかのコメンテーターによって指摘されたように、異なるインスタンスの Random のインスタンスはスレッド排他的ですが、同じようにシードされ、したがって、同一の疑似乱数列を誘発し、それらは同時にまたは互いの近い時間的近接内で作成される可能性があるためです。 この問題を軽減する一つの方法として、マスターの Random インスタンス (これは単一のスレッドによってロックされます) を使用して、いくつかのランダムな種を生成し、新しい Random インスタンスを初期化します。