我们有这个共享列表,其中“MyObject”代表一个类,其对象在创建后无法修改:
List<MyObject> fooList;
当在 fooList 上调用 .add 或 .remove 方法(这是唯一可以改变 fooList 的方法)时,fooList 被锁定(Monitor.TryEnter...)
每个线程都可以在访问它时执行此操作,同时还锁定 fooList:
foreach (MyObject o in fooList)
{
myList.Add(o);
}
foreach (MyObject o in myList)
{
Console.WriteLine(o.ToString());
}
假设存在锁只是为了确保 fooList 在 foreach 迭代正在进行时不会调用任何 .add 或 .remove 方法(因此使其无效)是否正确?
换句话说,如果 fooList 从程序一开始就是不可变的,那么移除锁是否安全?