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

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

DDD
リリース: 2025-01-16 11:55:58
オリジナル
578 人が閲覧しました

How to Ensure Thread Safety in C# Static Constructors and Singleton Access?

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

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