我相信这个问题会被问很多次,但我想澄清这个概念。
最近,当两个线程在两个不同的函数中访问同一个列表时,我遇到了一个错误。如果我没有正确的锁定,在什么情况下会导致问题?尽管我在第二个函数中有一个锁并且两个线程不相关,但它们正在操作同一个列表。一个是添加,一个是与一个空列表交换。在什么情况下会捕获异常?请帮忙。
伪代码:
List<SomeClass> list=new List<SomeClass>();
object mutex=new object();
线程 1 访问此函数并修改列表:
public void Manipulate()
{
//some operation
list.add(new SomeClass());
}
线程 2 访问此函数并清除列表:
public void SwapList()
{
List<SomeClass> cls=new List<SomeClass>();
try
{
while(Thread2.isAlive)
{
//some operation
if(list.Count()>0)
{
lock(mutex)
{
swap(ref list,ref cls)
}
}
}
}
catch(exception ex)
{
}
}
public void swap(List<SomeClass> a, List<SomeClass> b)
{
List<SomeClass> temp=a;
a=b;
b=temp;
}