Maison > développement back-end > C++ > Un singleton C# avec un constructeur statique est-il thread-safe ?

Un singleton C# avec un constructeur statique est-il thread-safe ?

DDD
Libérer: 2025-01-16 11:27:59
original
899 Les gens l'ont consulté

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

Problèmes de sécurité des threads singleton dans le constructeur statique C#

Cet article explore si les classes singleton C# implémentées à l'aide de constructeurs statiques sont thread-safe et comment garantir qu'une seule instance existe dans un environnement multithread.

Construction initiale

Les constructeurs statiques ne sont exécutés qu'une seule fois dans le domaine d'application, avant l'instanciation de la classe ou l'accès aux membres statiques. Par conséquent, la construction initiale d’une instance singleton est thread-safe.

Visite de suivi

Cependant, il est essentiel de garantir que l'accès après la construction initiale est thread-safe. L'implémentation fournie permet à plusieurs threads d'accéder simultanément à l'instance singleton, ce qui peut causer des problèmes.

Mécanisme de synchronisation

Pour résoudre ce problème, la mise en œuvre peut être améliorée à l'aide d'un mécanisme de synchronisation. Une solution consiste à ajouter un mutex statique comme celui-ci :

<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>
Copier après la connexion

Comment utiliser

Afin d'accéder en toute sécurité à une instance singleton, un thread doit d'abord acquérir un mutex à l'aide de la méthode Acquire(). Une fois terminée, la méthode Release() déverrouillera le mutex, permettant à d'autres threads d'accéder à l'instance.

Conclusion

En ajoutant un mécanisme de synchronisation, l'implémentation singleton devient thread-safe, éliminant ainsi les problèmes potentiels de concurrence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal