首頁 >後端開發 >C++ >如何在 C# 中建立線程安全的隨機數產生器?

如何在 C# 中建立線程安全的隨機數產生器?

Susan Sarandon
Susan Sarandon原創
2025-01-21 02:42:09408瀏覽

How Can I Create a Thread-Safe Random Number Generator in C#?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn