具体的な回答のみお願いします! コレクションのロック、スレッドの安全性などに関するより良い(ベスト)プラクティスに精通しています。この特定のシナリオに関するいくつかの回答/アイデアが必要です。
次のようなレガシー コードがあります。
public class GodObject
{
private readonly Dictionary<string, string> _signals;
//bunch of methods accessing the dictionary
private void SampleMethod1()
{
lock(_signals)
{
//critical code section 1
}
}
public void SampleMethod2()
{
lock(_signals)
{
//critical code section 2
}
}
}
ディクショナリへのすべてのアクセスは、そのようなロック ステートメント内にあります。ロックが明示的に機能していなかった場合に説明できるいくつかのバグが発生しています。つまり、2 つ以上のスレッドが辞書に同時にアクセスしているということです。
だから私の質問はこれです - クリティカルセクションが複数のスレッドによって同時にアクセスされる可能性のあるシナリオはありますか?? 私にとっては、参照は読み取り専用であるため、オブジェクトが変更されている可能性はなく、lock() に関する問題のほとんどは、同期が発生していないというよりは、デッドロックに関するものであるため、可能ではありません。しかし、多分私はいくつかのニュアンスやギラギラしたものを見逃していますか?
これは、長時間実行されている Windows サービス .NET Framework 3.5 で実行されています。