ホームページ > バックエンド開発 > C++ > 静的コンストラクターを使用した C# シングルトンはスレッドセーフですか?

静的コンストラクターを使用した C# シングルトンはスレッドセーフですか?

DDD
リリース: 2025-01-16 11:27:59
オリジナル
853 人が閲覧しました

Is a C# Singleton with a Static Constructor Thread-Safe?

C# 静的コンストラクターにおけるシングルトン スレッドの安全性の問題

この記事では、静的コンストラクターを使用して実装された C# シングルトン クラスがスレッド セーフであるかどうか、およびマルチスレッド環境にインスタンスが 1 つだけ存在することを確認する方法について説明します。

初期構築

静的コンストラクターは、クラスがインスタンス化される前、または静的メンバーにアクセスされる前に、アプリケーション ドメインで 1 回だけ実行されます。したがって、シングルトン インスタンスの最初の構築はスレッドセーフです。

フォローアップ訪問

ただし、最初の構築後のアクセスがスレッドセーフであることを確認することが重要です。提供された実装では、複数のスレッドがシングルトン インスタンスに同時にアクセスできるため、問題が発生する可能性があります。

同期メカニズム

この問題を解決するには、同期メカニズムを使用して実装を強化できます。 1 つの方法は、次のような静的ミューテックスを追加することです:

<code class="language-c#">public class Singleton
{
    private static Singleton instance;
    // 添加静态互斥锁以同步实例的使用。
    private static System.Threading.Mutex mutex;
    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>
ログイン後にコピー

使用方法

シングルトン インスタンスに安全にアクセスするには、スレッドはまず Acquire() メソッドを使用してミューテックスを取得する必要があります。完了すると、Release() メソッドはミューテックスのロックを解除し、他のスレッドがインスタンスにアクセスできるようにします。

結論

同期メカニズムを追加することにより、シングルトン実装はスレッドセーフになり、潜在的な同時実行の問題が排除されます。

以上が静的コンストラクターを使用した C# シングルトンはスレッドセーフですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート