Rumah > pembangunan bahagian belakang > C++ > Adakah C#'s Random.Next() Thread-Safe, dan Bagaimana Anda Boleh Mencipta Alternatif Thread-Safe?

Adakah C#'s Random.Next() Thread-Safe, dan Bagaimana Anda Boleh Mencipta Alternatif Thread-Safe?

Susan Sarandon
Lepaskan: 2025-01-21 02:51:17
asal
849 orang telah melayarinya

Is C#'s Random.Next() Thread-Safe, and How Can You Create a Thread-Safe Alternative?

Isu keselamatan benang dalam penjana nombor rawak C#

Dalam pembangunan perisian, memastikan akses selamat kepada sumber yang dikongsi dalam persekitaran berbilang benang adalah penting. Kaedah Random.Next() C# digunakan untuk menjana nombor rawak, tetapi keselamatan benangnya patut diterokai.

Adakah

Random.Next() selamat untuk urutan?

Tidak. Jika berbilang urutan menggunakan contoh Random.Next() yang sama pada masa yang sama, ini boleh membawa kepada tingkah laku yang tidak dapat diramalkan dan mungkin juga siri nilai sifar.

Buat penjana nombor rawak selamat benang

Untuk mencipta versi kelas Random selamat benang, pendekatan berikut disyorkan:

<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

Cara ia berfungsi:

Kelas ini mencapai keselamatan benang dengan mengekalkan tika Random statik unik untuk setiap urutan. Apabila urutan baharu mengakses kelas ini, ia menjana nilai benih daripada contoh Random global, memastikan urutan itu unik bagi setiap utas.

Menyelesaikan Randomisu kecil

Kelas

Random juga mempunyai ciri: jika berbilang tika dibuat dalam tempoh masa yang singkat (dalam masa 15 milisaat), mereka mungkin mengembalikan jujukan yang sama. Untuk mengurangkan masalah ini, gunakan contoh Random global untuk menjana benih bagi mengelakkan konflik.

Kesimpulan:

Memahami had keselamatan benang C# Random.Next() dan melaksanakan versi selamat benang boleh memastikan penjanaan nombor rawak yang boleh dipercayai dalam aplikasi berbilang benang.

Atas ialah kandungan terperinci Adakah C#'s Random.Next() Thread-Safe, dan Bagaimana Anda Boleh Mencipta Alternatif Thread-Safe?. 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