Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memastikan Keselamatan Benang dengan Pembina Statik C# dan Corak Singleton?

Bagaimana untuk Memastikan Keselamatan Benang dengan Pembina Statik C# dan Corak Singleton?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-16 11:52:58939semak imbas

How to Ensure Thread Safety with C# Static Constructors and Singleton Pattern?

Keselamatan benang bagi pembina statik C#

Dalam C#, pembina statik dilaksanakan sekali sahaja bagi setiap domain aplikasi sebelum sebarang contoh kelas dibuat atau ahli statik diakses. Ini memastikan bahawa ia adalah selamat benang pada pembinaan awal, menghapuskan keperluan untuk mengunci dan ujian batal semasa penciptaan objek tunggal.

Walau bagaimanapun, penggunaan contoh seterusnya mungkin tidak segerak. Untuk menyelesaikan masalah ini, pertimbangkan untuk menambah mutex statik untuk menyegerakkan akses kepada contoh.

Berikut ialah contoh pelaksanaan singleton selamat benang yang termasuk kunci mutex:

<code class="language-c#">public class Singleton
{
    private static Singleton instance;
    private static System.Threading.Mutex mutex = new System.Threading.Mutex(); // 初始化互斥锁
    private Singleton() { }

    public static Singleton Instance
    {
        get
        {
            mutex.WaitOne();
            try
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
            finally
            {
                mutex.ReleaseMutex();
            }
        }
    }
}</code>

Pelaksanaan ini menggunakan atribut Instance untuk menyegerakkan akses kepada contoh tunggal, memastikan operasi selamat benang untuk semua senario penggunaan seterusnya. Dengan menggunakan blok get dalam aksesori try...finally, anda memastikan bahawa mutex dilepaskan dengan betul walaupun pengecualian berlaku. Ini lebih bersih dan selamat daripada kaedah Acquire() dan Release() dalam contoh asal.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Keselamatan Benang dengan Pembina Statik C# dan Corak Singleton?. 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