Rumah >pembangunan bahagian belakang >C++ >Adakah Kaedah C#'s Random.Next() Thread-Safe, dan Bagaimana Saya Boleh Membuatnya Begitu?
Keselamatan benang kaedah C# Random.Next()
KaedahC#'s Random.Next()
tidak selamat untuk benang. Menggunakan contoh Random
yang sama daripada berbilang urutan boleh mengakibatkan tingkah laku yang tidak dapat diramalkan, atau malah mengembalikan hasil semua 0.
Penyelesaian
Untuk mencipta versi selamat untuk benang Random
kita boleh mencipta kejadian setempat untuk setiap urutan. Kod berikut menunjukkan ini:
<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>
Kelas ini mengekalkan pembolehubah Random
statik yang berasingan (_local
) untuk setiap urutan. Untuk mengelakkan percanggahan antara tika yang dibuat pada masa yang sama, gunakan tika Random
statik global (_global
) untuk benih kejadian setempat-benang.
Atas ialah kandungan terperinci Adakah Kaedah C#'s Random.Next() Thread-Safe, dan Bagaimana Saya Boleh Membuatnya Begitu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!