Rumah >pembangunan bahagian belakang >C++ >Adakah C# Singleton dengan Benang Pembina Statik Selamat?
Isu keselamatan benang tunggal dalam pembina statik C#
Artikel ini meneroka sama ada kelas tunggal C# yang dilaksanakan menggunakan pembina statik selamat untuk benang, dan cara memastikan bahawa hanya satu tika wujud dalam persekitaran berbilang benang.
Pembinaan awal
Pembina statik dilaksanakan sekali sahaja dalam domain aplikasi, sebelum kelas dijadikan instantiated atau ahli statik diakses. Oleh itu, pembinaan awal contoh tunggal adalah selamat untuk benang.
Lawatan susulan
Walau bagaimanapun, adalah penting untuk memastikan bahawa akses selepas pembinaan awal adalah selamat untuk benang. Pelaksanaan yang disediakan membenarkan berbilang benang untuk mengakses contoh tunggal secara serentak, yang berpotensi menyebabkan masalah.
Mekanisme penyegerakan
Untuk menyelesaikan masalah ini, pelaksanaan boleh dipertingkatkan menggunakan mekanisme penyegerakan. Salah satu cara ialah menambah mutex statik seperti ini:
<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>
Cara menggunakan
Untuk mengakses contoh tunggal dengan selamat, benang mesti memperoleh mutex menggunakan kaedah Acquire()
dahulu. Setelah selesai, kaedah Release()
akan membuka kunci mutex, membenarkan urutan lain untuk mengakses contoh.
Kesimpulan
Dengan menambahkan mekanisme penyegerakan, pelaksanaan tunggal menjadi selamat untuk benang, menghapuskan potensi masalah serentak.
Atas ialah kandungan terperinci Adakah C# Singleton dengan Benang Pembina Statik Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!