1

私は実装したいと思い、いくつかの例Singletonからこの記事を見つけましたMSDN:

http://msdn.microsoft.com/en-us/library/ff650316.aspx

サービスをホストするアプリケーションがありますWCF。アプリケーションは から取得StringClient、この文字列を my に送信しましたSingleton。そして、Singleton class私は自分Jobのことをするクラスを開いています(プロセスを開く..)。ジョブクラスにはEvent、プロセスが開始して終了するたびに UI が更新されることが含まれています。Singleton classこのイベントにサブスクライブする必要があります。また、アプリケーションの起動時に新しいSingletonインスタンスを開いています。

私のサービスは次のようにServiceBehavior定義されConcurrencyMode.MultipleInstanceContextMode.PerSessionいるため、すべてのクライアントメッセージが新しいインスタンスを作成します:

[ServiceBehavior(
    ConcurrencyMode = ConcurrencyMode.Multiple,
    InstanceContextMode = InstanceContextMode.PerSession)]

私の唯一の質問は、スレッドセーフまたは非スレッドセーフを使用する必要があるSingleton classかどうかです。

4

3 に答える 3

2

Yes, a singleton should be thread safe.

于 2013-10-04T08:41:44.077 に答える
1

変更可能なものをビルドするときは、常にスレッド セーフ バージョンを選択する必要があります。読み取り専用コレクションの場合、スレッド セーフは重要ではありません。

スレッド セーフでは、通常はロックが原因でわずかなパフォーマンス コストが発生しますが、競合状態は通常デバッグが難しいため、後で発生する可能性のある問題を大幅に軽減できます。

于 2013-10-04T08:46:37.877 に答える