C# 静的コンストラクターのスレッド セーフ
C# では、静的コンストラクターは、クラス インスタンスが作成される前、または静的メンバーにアクセスされる前に、アプリケーション ドメインごとに 1 回だけ実行されます。これにより、初期構築時にスレッドセーフであることが保証され、シングルトン オブジェクト作成時のロックや null テストの必要がなくなります。
ただし、その後のインスタンスの使用は同期的ではない可能性があります。この問題を解決するには、静的ミューテックスを追加してインスタンスへのアクセスを同期することを検討してください。
次に、ミューテックス ロックを含むスレッドセーフなシングルトン実装の例を示します。
<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>
この実装では、Instance
属性を使用してシングルトン インスタンスへのアクセスを同期し、後続のすべての使用シナリオでスレッドセーフな操作を保証します。 get
アクセサー内で try...finally
ブロックを使用すると、例外が発生した場合でもミューテックスが正しく解放されます。 これは、元の例の Acquire()
および Release()
メソッドよりもクリーンで安全です。
以上がC# 静的コンストラクターとシングルトン パターンを使用してスレッドの安全性を確保するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。