Heim >Backend-Entwicklung >C++ >Wie kann die Thread-Sicherheit in statischen C#-Konstruktoren und Singleton-Zugriff gewährleistet werden?

Wie kann die Thread-Sicherheit in statischen C#-Konstruktoren und Singleton-Zugriff gewährleistet werden?

DDD
DDDOriginal
2025-01-16 11:55:58582Durchsuche

How to Ensure Thread Safety in C# Static Constructors and Singleton Access?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn