首頁 > 後端開發 > C++ > 為什麼我的隨機數生成器只會產生一個數字,我該如何修復?

為什麼我的隨機數生成器只會產生一個數字,我該如何修復?

Linda Hamilton
發布: 2025-02-03 08:21:08
原創
598 人瀏覽過

Why Does My Random Number Generator Only Produce One Number, and How Can I Fix It?

隨機數生成器只產生一個隨機數的問題及解決方案

本文討論一個隨機數生成器函數RandomNumber只產生一個隨機數的問題。問題根源在於該函數每次調用時都創建一個新的Random實例。由於Random實例的內部狀態基於系統時鐘初始化,在緊密的循環中,多次調用會得到相同的值。

為了解決這個問題並確保隨機數的準確性,應該創建一個Random實例並重複使用。以下代碼展示瞭如何實現:

<code class="language-csharp">private static readonly Random random = new Random();
private static readonly object syncLock = new object();

public static int RandomNumber(int min, int max)
{
    lock (syncLock)
    {
        return random.Next(min, max);
    }
}</code>
登入後複製

通過使用lock語句,我們同步對Random實例的訪問,保證同一線程內每次調用RandomNumber都會產生一個唯一的隨機數。

另一種方法是使用ThreadLocal變量為每個線程維護一個Random實例,從而避免同步:

<code class="language-csharp">private static readonly ThreadLocal<Random> appRandom = new ThreadLocal<Random>(() => new Random());</code>
登入後複製

以上是為什麼我的隨機數生成器只會產生一個數字,我該如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板