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

Adakah Pembina Statik C# Mencukupi untuk Pelaksanaan Singleton Selamat Benang?

Patricia Arquette
Patricia Arquetteasal
2025-01-16 11:36:58147semak imbas

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

Keselamatan benang bagi pembina statik C# dalam mod tunggal

Corak tunggal ialah corak reka bentuk biasa dalam pembangunan perisian, memastikan bahawa kelas hanya mempunyai satu tika dalam domain aplikasi. Dalam C#, pembina statik bertanggungjawab untuk memulakan ahli statik kelas, termasuk contoh dalam pelaksanaan tunggal.

Soalan:

Adakah benang pelaksanaan tunggal C# berikut selamat?

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

    private Singleton() { }

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

    public static Singleton Instance
    {
        get { return instance; }
    }
}</code>

Jawapan:

Ya, pembina statik dalam pelaksanaan ini menjamin keselamatan benang semasa pembinaan awal tika tunggal. Menurut dokumentasi Microsoft, pembina statik dalam C# dijamin untuk dijalankan sekali sahaja dalam setiap domain aplikasi sebelum sebarang contoh kelas dibuat atau ahli statik diakses.

Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa keselamatan rangkaian ini hanya terpakai pada pembinaan awal kejadian. Ia tidak menjamin bahawa penggunaan contoh seterusnya akan disegerakkan. Untuk memastikan keselamatan benang yang lengkap, mekanisme penyegerakan tambahan diperlukan.

Salah satu cara untuk mencapai penyegerakan benang adalah dengan memperkenalkan mutex statik untuk mengawal akses kepada contoh tunggal:

<code class="language-C#">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;
    }

    public static void Release()
    {
        mutex.ReleaseMutex();
    }
}</code>

Pelaksanaan ini memerlukan setiap panggilan ke Acquire() digandingkan dengan panggilan ke Release(), memastikan hanya satu urutan boleh mengakses tika tunggal pada satu masa. Dengan mengambil pendekatan ini, keselamatan benang dicapai bukan sahaja semasa pembinaan awal, tetapi juga semasa penggunaan contoh berikutnya.

Atas ialah kandungan terperinci Adakah Pembina Statik C# Mencukupi untuk Pelaksanaan Singleton Selamat Benang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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