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!