ホームページ >バックエンド開発 >C++ >C# 静的コンストラクターとシングルトン パターンを使用してスレッドの安全性を確保するにはどうすればよいですか?

C# 静的コンストラクターとシングルトン パターンを使用してスレッドの安全性を確保するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-16 11:52:58934ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。