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
DDDoriginal
2025-01-16 11:55:58579parcourir

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>

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!

Déclaration:
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