C# 静的コンストラクターのスレッド セーフ
C# では、静的コンストラクターは、インスタンスの初期化またはクラスの静的メンバー アクセスの前に実行されます。したがって、シングルトンの初期構築におけるスレッドの安全性が保証されます。
初期工事も安心
提供されたシングルトン実装は、ロックや null テストに依存しないため、この初期フェーズがスレッドセーフであることを保証します。
インスタンスのアクセスセキュリティ
ただし、これは、その後のインスタンスの使用が同期されることを保証するものではありません。この問題を解決するには、次の改善を行うことができます:
<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>
スレッドセーフを強制する
この変更された実装は、静的ミューテックスを使用してインスタンスへのアクセスを同期し、一度に 1 つのスレッドのみがインスタンスにアクセスできるようにします。シングルトンを使用するには、スレッドは Acquire()
メソッドを呼び出してインスタンスを取得し、終了時に Release()
メソッドを呼び出す必要があります。
以上がC# 静的コンストラクターとシングルトン アクセスでスレッドの安全性を確保するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。