Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencipta Penjana Nombor Rawak Selamat Benang dalam C#?

Bagaimanakah Saya Boleh Mencipta Penjana Nombor Rawak Selamat Benang dalam C#?

Susan Sarandon
Lepaskan: 2025-01-21 02:42:09
asal
405 orang telah melayarinya

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

Memastikan Keselamatan Benang dengan Penjana Nombor Rawak C#

Kaedah Random.Next() terbina dalam C# tidak selamat untuk benang. Menggunakannya dalam aplikasi berbilang benang boleh membawa kepada keputusan yang salah disebabkan oleh keadaan perlumbaan. Nasib baik, mencipta versi selamat benang adalah mudah.

Penjana Nombor Rawak Selamat Benang

Kelas ThreadSafeRandom berikut menyediakan penyelesaian menggunakan pembolehubah statik benang untuk menjamin keselamatan benang. Setiap urutan mendapat contoh Random bebasnya sendiri.

<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>
Salin selepas log masuk

Pengurusan Benih untuk Nombor Rawak Unik

Masalah biasa dengan berbilang Random kejadian ialah menjana nombor yang serupa atau serupa, terutamanya apabila dibuat secara berturut-turut. Pelaksanaan ini menangani perkara ini dengan menggunakan contoh Random global (_global) untuk menjana benih unik bagi setiap contoh Random benang-tempatan (_local). Pernyataan lock menghalang keadaan perlumbaan apabila mengakses Random global untuk penjanaan benih.

Kaedah ini memastikan benih yang berbeza untuk setiap utas, menghasilkan urutan nombor yang benar-benar rawak dan bebas. Pembangun kini boleh menggunakan penjanaan nombor rawak dengan selamat dalam aplikasi berbilang benang, mengelakkan perangkap pendekatan tidak selamat benang.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencipta Penjana Nombor Rawak Selamat Benang dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan