Heim >Backend-Entwicklung >C++ >Wie kann die Thread-Sicherheit in statischen C#-Konstruktoren und Singleton-Zugriff gewährleistet werden?
Thread-Sicherheit des statischen C#-Konstruktors
In C# wird ein statischer Konstruktor vor jeder Instanzinitialisierung oder dem Zugriff auf statische Mitglieder einer Klasse ausgeführt. Daher gewährleistet es die Thread-Sicherheit der anfänglichen Konstruktion des Singletons.
Der erste Bau ist sicher
Die bereitgestellte Singleton-Implementierung garantiert, dass diese Anfangsphase Thread-sicher ist, da sie nicht auf Sperren oder Nulltests angewiesen ist.
Instanzzugriffssicherheit
Dies garantiert jedoch nicht, dass die spätere Nutzung der Instanz synchronisiert wird. Um dieses Problem zu lösen, können folgende Verbesserungen vorgenommen werden:
<code class="language-csharp">public class Singleton { // 添加静态互斥锁以同步对实例的访问 private static System.Threading.Mutex mutex; private static Singleton instance; 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>
Thread-Sicherheit erzwingen
Diese modifizierte Implementierung verwendet einen statischen Mutex, um den Zugriff auf die Instanz zu synchronisieren und sicherzustellen, dass jeweils nur ein Thread darauf zugreifen kann. Um einen Singleton zu verwenden, muss ein Thread die Methode Acquire()
aufrufen, um die Instanz abzurufen, und nach Abschluss die Methode Release()
aufrufen.
Das obige ist der detaillierte Inhalt vonWie kann die Thread-Sicherheit in statischen C#-Konstruktoren und Singleton-Zugriff gewährleistet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!