この共有リストがあります。「MyObject」は、作成後にオブジェクトを変更できないクラスを表します。
List<MyObject> fooList;
.add または .remove メソッド (fooList を変更できる唯一のもの) が fooList で呼び出されると、fooList がロックされます (Monitor.TryEnter...)
各スレッドは、fooList をロックしながら、アクセス中にこれを行うことができます。
foreach (MyObject o in fooList)
{
myList.Add(o);
}
foreach (MyObject o in myList)
{
Console.WriteLine(o.ToString());
}
foreach 反復の進行中に fooList に .add または .remove メソッドが呼び出されないようにするためだけにロックが存在すると仮定するのは正しいですか (したがって、それを無効にします)。
言い換えれば、プログラムの最初から fooList が不変だった場合、ロックを解除しても安全でしょうか?