Maison > développement back-end > C++ > Comment garantir la sécurité des threads dans les constructeurs statiques C# et l'accès Singleton ?

Comment garantir la sécurité des threads dans les constructeurs statiques C# et l'accès Singleton ?

DDD
Libérer: 2025-01-16 11:55:58
original
577 Les gens l'ont consulté

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

Sécurité des threads du constructeur statique C#

En C#, un constructeur statique est exécuté avant toute initialisation d'instance ou accès membre statique d'une classe. Par conséquent, il garantit la sécurité des threads de la construction initiale du singleton.

La construction initiale est sûre

L'implémentation singleton fournie garantit que cette phase initiale est thread-safe car elle ne repose pas sur le verrouillage ou les tests nuls.

Sécurité de l'accès aux instances

Cependant, cela ne garantit pas que l'utilisation ultérieure de l'instance sera synchronisée. Pour résoudre ce problème, les améliorations suivantes peuvent être apportées :

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

Appliquer la sécurité des threads

Cette implémentation modifiée utilise un mutex statique pour synchroniser l'accès à l'instance, garantissant qu'un seul thread peut y accéder à la fois. Pour utiliser un singleton, un thread doit appeler la méthode Acquire() pour obtenir l'instance et appeler la méthode Release() une fois terminé.

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