假设我有这个在不同线程之间共享的静态列表:
public static List<myClass> fooList = new List<myClass>();
现在,我想在一个线程中访问这个共享列表来构建自己的私有列表,我想做以下事情:
List<myClass> newFooList = new List<myClass>();
lock (fooList)
{
foreach (myClass element in fooList)
{
newFooList.Add(element);
}
}
但是如果我这样做,我正在构建一个新列表,它引用与共享列表相同的元素,所以如果稍后我访问 newFooList 而没有任何锁(应该是这样),我实际上是在访问相同的元素共享列表,因此违反了锁,对吗?
那么,解决方案是让 newFooList 中的新元素与 fooList 中的新元素具有相同的内容,而不是传递引用?