Heim > Backend-Entwicklung > C++ > Reicht der statische Konstruktor von C# für die Thread-sichere Singleton-Implementierung aus?

Reicht der statische Konstruktor von C# für die Thread-sichere Singleton-Implementierung aus?

Patricia Arquette
Freigeben: 2025-01-16 11:36:58
Original
143 Leute haben es durchsucht

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

Thread-Sicherheit des statischen C#-Konstruktors im Singleton-Modus

Das Singleton-Muster ist ein gängiges Entwurfsmuster in der Softwareentwicklung, das sicherstellt, dass eine Klasse nur eine Instanz in der Anwendungsdomäne hat. In C# ist ein statischer Konstruktor für die Initialisierung der statischen Mitglieder einer Klasse verantwortlich, einschließlich Instanzen in einer Singleton-Implementierung.

Frage:

Ist die folgende C#-Singleton-Implementierung threadsicher?

<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>
Nach dem Login kopieren

Antwort:

Ja, der statische Konstruktor in dieser Implementierung garantiert Thread-Sicherheit während der ersten Konstruktion der Singleton-Instanz. Laut Microsoft-Dokumentation werden statische Konstruktoren in C# garantiert nur einmal in jeder Anwendungsdomäne ausgeführt, bevor eine Instanz der Klasse erstellt wird oder auf statische Mitglieder zugegriffen wird.

Es ist jedoch wichtig zu beachten, dass diese Thread-Sicherheit nur für die anfängliche Erstellung der Instanz gilt. Es ist nicht gewährleistet, dass die spätere Nutzung der Instanz synchronisiert wird. Um vollständige Thread-Sicherheit zu gewährleisten, sind zusätzliche Synchronisationsmechanismen erforderlich.

Eine Möglichkeit, eine Thread-Synchronisierung zu erreichen, besteht darin, einen statischen Mutex einzuführen, um den Zugriff auf die Singleton-Instanz zu steuern:

<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>
Nach dem Login kopieren

Diese Implementierung erfordert, dass jeder Aufruf von Acquire() mit einem Aufruf von Release() gepaart wird, um sicherzustellen, dass jeweils nur ein Thread auf die Singleton-Instanz zugreifen kann. Durch diesen Ansatz wird Thread-Sicherheit nicht nur während der anfänglichen Konstruktion, sondern auch während der späteren Verwendung der Instanz erreicht.

Das obige ist der detaillierte Inhalt vonReicht der statische Konstruktor von C# für die Thread-sichere Singleton-Implementierung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage