May*_*aya 5 c# synchronization locking
我知道使用lock(this)或任何共享对象是错误的.
我想知道这种用法是否合适?
public class A
{
private readonly object locker = new object();
private List<int> myList;
public A()
{
myList = new List<int>()
}
private void MethodeA()
{
lock(locker)
{
myList.Add(10);
}
}
public void MethodeB()
{
CallToMethodInOtherClass(myList);
}
}
public class OtherClass
{
private readonly object locker = new object();
public CallToMethodInOtherClass(List<int> list)
{
lock(locker)
{
int i = list.Count;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个线程安全吗?在OtherClass我们锁定私有对象,所以如果class A锁具有其私有锁,列表仍然可以在锁定块中更改OtherClass?
Ste*_*ger 10
不,这不是线程安全的.添加和计数可以在"相同"时间执行.您有两个不同的锁定对象.
传递列表时始终锁定自己的锁定对象:
public void MethodeB()
{
lock(locker)
{
CallToMethodInOtherClass(myList);
}
}
Run Code Online (Sandbox Code Playgroud)