Heim >Backend-Entwicklung >C++ >Ist ein C#-Singleton mit einem statischen Konstruktor threadsicher?

Ist ein C#-Singleton mit einem statischen Konstruktor threadsicher?

DDD
DDDOriginal
2025-01-16 11:27:59853Durchsuche

Is a C# Singleton with a Static Constructor Thread-Safe?

Singleton-Thread-Sicherheitsprobleme im statischen C#-Konstruktor

In diesem Artikel wird untersucht, ob mit statischen Konstruktoren implementierte C#-Singleton-Klassen threadsicher sind und wie sichergestellt werden kann, dass in einer Multithread-Umgebung nur eine Instanz vorhanden ist.

Erstbau

Statische Konstruktoren werden nur einmal in der Anwendungsdomäne ausgeführt, bevor die Klasse instanziiert wird oder auf die statischen Mitglieder zugegriffen wird. Daher ist die anfängliche Konstruktion einer Singleton-Instanz threadsicher.

Nachuntersuchung

Es ist jedoch wichtig sicherzustellen, dass der Zugriff nach der ersten Konstruktion threadsicher ist. Die bereitgestellte Implementierung ermöglicht mehreren Threads den gleichzeitigen Zugriff auf die Singleton-Instanz, was möglicherweise zu Problemen führt.

Synchronisationsmechanismus

Um dieses Problem zu lösen, kann die Implementierung mithilfe eines Synchronisierungsmechanismus erweitert werden. Eine Möglichkeit besteht darin, einen statischen Mutex wie diesen hinzuzufügen:

<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>

Anwendung

Um sicher auf eine Singleton-Instanz zuzugreifen, muss ein Thread zunächst einen Mutex mithilfe der Methode Acquire() erwerben. Nach Abschluss entsperrt die Release()-Methode den Mutex und ermöglicht anderen Threads den Zugriff auf die Instanz.

Fazit

Durch das Hinzufügen eines Synchronisierungsmechanismus wird die Singleton-Implementierung threadsicher und eliminiert potenzielle Parallelitätsprobleme.

Das obige ist der detaillierte Inhalt vonIst ein C#-Singleton mit einem statischen Konstruktor threadsicher?. 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