Rumah > pembangunan bahagian belakang > C++ > Adakah Benang Pembina Statik C# Selamat untuk Pelaksanaan Singleton?

Adakah Benang Pembina Statik C# Selamat untuk Pelaksanaan Singleton?

Mary-Kate Olsen
Lepaskan: 2025-01-16 11:31:59
asal
243 orang telah melayarinya

Is C#'s Static Constructor Thread-Safe for Singleton Implementations?

Adakah C# pembina statik selamat untuk benang?

Pertimbangkan pelaksanaan tunggal berikut:

<code class="language-csharp">public class Singleton
{
    private static Singleton instance;

    private Singleton() { }

    static Singleton()
    {
        instance = new Singleton();
    }

    public static Singleton Instance
    {
        get { return instance; }
    }
}</code>
Salin selepas log masuk

Adakah urutan pelaksanaan ini selamat?

Jawapan:

Pembina statik (seperti yang ditunjukkan dalam contoh) dijamin akan dijalankan sekali sahaja dalam domain aplikasi, sebelum sebarang contoh kelas dibuat atau sebelum ahli statik diakses (https://www.php .cn /link/362c6840e40a65edd557a108c219f8f0).

Oleh itu, pembinaan awal instance tunggal adalah selamat untuk benang, bermakna ia tidak memerlukan penguncian atau ujian batal. Walau bagaimanapun, ini tidak menjamin bahawa objek tunggal boleh digunakan secara segerak.

Untuk mencapai penyegerakan sebarang penggunaan contoh tunggal, beberapa kaedah boleh digunakan. Satu kaedah kelihatan seperti ini:

<code class="language-csharp">public class Singleton
{
    private static Singleton instance;
    // 添加静态互斥体以同步实例的使用。
    private static System.Threading.Mutex mutex;
    private Singleton() { }
    static Singleton()
    {
        instance = new Singleton();
        mutex = new System.Threading.Mutex();
    }

    public static Singleton Acquire()
    {
        mutex.WaitOne();
        return instance;
    }

    // 每次调用Acquire()都需要调用Release()
    public static void Release()
    {
        mutex.ReleaseMutex();
    }
}</code>
Salin selepas log masuk

Pelaksanaan ini memperkenalkan mutex statik untuk menyegerakkan akses kepada kejadian tunggal. Untuk memastikan penyegerakan yang betul, pemerolehan setiap tika (Acquire()) mesti dikeluarkan (Release()).

Atas ialah kandungan terperinci Adakah Benang Pembina Statik C# Selamat untuk Pelaksanaan Singleton?. 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