Rumah > pembangunan bahagian belakang > C++ > Adakah Kaedah C#'s Random.Next() Thread-Safe, dan Bagaimana Saya Boleh Membuatnya Begitu?

Adakah Kaedah C#'s Random.Next() Thread-Safe, dan Bagaimana Saya Boleh Membuatnya Begitu?

Patricia Arquette
Lepaskan: 2025-01-21 02:37:07
asal
544 orang telah melayarinya

Is C#'s Random.Next() Method Thread-Safe, and How Can I Make It So?

Keselamatan benang kaedah C# Random.Next()

Kaedah

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

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!

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