2016-05-30 11 views
2

Q:2つの異なるアプリケーションドメインの2つのスレッドがクラスにアクセスすると、シングルトンインスタンスが壊れることはありますか?シングルトンクラスとマルチスレッド

私はいくつかの研究を行い、以下の点を関連性があると判断しました。

  1. A(.NET)シングルトンは、App-Domainごとに一意です。少なくとも、共通のシングルトンパターンがあります。私はプロセスごとにシングルトンを実装できると思いますが、実際にどのように動作するかは考えていませんでした。...

  2. シングルトンのインスタンスが2つあります。

  3. メソッドの入力パラメータ(引数)がスタックにあります。各スレッドには別々のスタックがあります。実行中のスレッドが切り替わると、スタックが置き換えられます。

エキスパートのアドバイス。

答えて

3

2つの異なるapp-domainsの2つのスレッドがクラスにアクセスすると、シングルトンインスタンスが壊れることはありますか?

はい。同じアプリドメインからも可能です。

private static Singleton instance; 
public static Singleton Instance 
{ 
    if (instance == null) 
    { 
     instance = new Singleton(); 
    } 

    return instance; 
} 

両方のスレッドが同時にプロパティに入る可能性があります。どちらの場合もinstance == nullがtrueで、新しいインスタンスが作成されます。 1つのメソッドが既に作成されたインスタンスを返し、もう1つのメソッドがinstanceをリセットし、そのインスタンスをすぐに返します。シングルトンが壊れました。

さらに多くを読むにはthread-safe singletons on the blog of Jon Skeet

+0

ありがとう@Patrick。 – Gagan

関連する問題