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

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

Mary-Kate Olsen
Freigeben: 2025-01-16 11:52:58
Original
932 Leute haben es durchsucht

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

Thread-Sicherheit des statischen C#-Konstruktors

In C# werden statische Konstruktoren nur einmal pro Anwendungsdomäne ausgeführt, bevor eine Klasseninstanz erstellt oder auf statische Mitglieder zugegriffen wird. Dadurch wird sichergestellt, dass sie bei der ersten Erstellung threadsicher sind, sodass bei der Erstellung von Singleton-Objekten keine Sperren und Nulltests erforderlich sind.

Die spätere Nutzung der Instanz erfolgt jedoch möglicherweise nicht synchron. Um dieses Problem zu lösen, sollten Sie erwägen, einen statischen Mutex hinzuzufügen, um den Zugriff auf die Instanz zu synchronisieren.

Das Folgende ist ein Beispiel für eine Thread-sichere Singleton-Implementierung, die eine Mutex-Sperre enthält:

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

Diese Implementierung verwendet das Attribut Instance, um den Zugriff auf die Singleton-Instanz zu synchronisieren und so einen threadsicheren Betrieb für alle nachfolgenden Nutzungsszenarien sicherzustellen. Durch die Verwendung eines get-Blocks innerhalb eines try...finally-Accessors stellen Sie sicher, dass der Mutex auch dann korrekt freigegeben wird, wenn eine Ausnahme auftritt. Dies ist sauberer und sicherer als die Methoden Acquire() und Release() im Originalbeispiel.

Das obige ist der detaillierte Inhalt vonWie kann die Thread-Sicherheit mit statischen C#-Konstruktoren und Singleton-Muster gewährleistet werden?. 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