使用 C# 的隨機數產生器確保執行緒安全
C# 的內建 Random.Next()
方法不是執行緒安全的。 在多執行緒應用程式中使用它可能會由於競爭條件而導致錯誤的結果。 幸運的是,建立線程安全版本非常簡單。
線程安全的隨機數產生器
下面的ThreadSafeRandom
類別提供了一個使用執行緒靜態變數來保證執行緒安全的解決方案。每個執行緒都有自己獨立的Random
實例。
<code class="language-csharp">public class ThreadSafeRandom { private static readonly Random _global = new Random(); [ThreadStatic] private static Random _local; public int Next() { if (_local == null) { int seed; lock (_global) { seed = _global.Next(); } _local = new Random(seed); } return _local.Next(); } }</code>
唯一隨機數的種子管理
多個 Random
實例的一個常見問題是產生相似或相同的數字,尤其是在快速連續建立時。 此實作透過使用全域 Random
實例 (_global
) 為每個執行緒本地 Random
實例 (_local
) 產生唯一的種子來解決此問題。 lock
語句可防止存取全域 Random
進行種子產生時的競爭條件。
此方法確保每個執行緒都有不同的種子,從而產生真正隨機且獨立的數字序列。 開發人員現在可以在多執行緒應用程式中安全地使用隨機數生成,避免非執行緒安全方法的陷阱。
以上是如何在 C# 中建立線程安全的隨機數產生器?的詳細內容。更多資訊請關注PHP中文網其他相關文章!