Maison > développement back-end > C++ > Comment garantir la sécurité des threads avec les constructeurs statiques C# et le modèle Singleton ?

Comment garantir la sécurité des threads avec les constructeurs statiques C# et le modèle Singleton ?

Mary-Kate Olsen
Libérer: 2025-01-16 11:52:58
original
931 Les gens l'ont consulté

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

Sécurité des threads du constructeur statique C#

En C#, les constructeurs statiques ne sont exécutés qu'une seule fois par domaine d'application avant la création d'une instance de classe ou l'accès aux membres statiques. Cela garantit qu'ils sont thread-safe lors de la construction initiale, éliminant ainsi le besoin de verrouillage et de tests nuls lors de la création d'objets singleton.

Cependant, l'utilisation ultérieure de l'instance peut ne pas être synchrone. Pour résoudre ce problème, pensez à ajouter un mutex statique pour synchroniser l'accès à l'instance.

Ce qui suit est un exemple d'implémentation singleton thread-safe qui inclut un verrou mutex :

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

Cette implémentation utilise l'attribut Instance pour synchroniser l'accès à l'instance singleton, garantissant ainsi un fonctionnement thread-safe pour tous les scénarios d'utilisation ultérieurs. En utilisant un bloc get dans un accesseur try...finally, vous vous assurez que le mutex est libéré correctement même si une exception se produit. C'est plus propre et plus sûr que les méthodes Acquire() et Release() de l'exemple d'origine.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal