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