Sve*_*art 1 c# multithreading locking
在一个项目我正在玩线程.我试图建立一个不会"破坏"数据的安全线程.我的线程在后台运行,并在另一个类上调用函数,我可以调用Go和Go2,一个函数添加,一个从列表中删除.我不希望它们同时运行,以下情况有什么区别:
static readonly object _locker1 = new object();
static readonly object _locker2 = new object();
public void Go(Object something)
{
lock (_locker1)
{
myList.add(something);
}
}
public void Go2(Object something)
{
lock (_locker2)
{
myList.Remove(something);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我用以下代替Go2:
public void Go2(Object something)
{
lock (_locker1)
{
myList.Remove(something);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意锁定参数.
第三种情况可以帮助我理解,假设我从一个不同的线程(thread2)调用Go,它是否可以运行,因为_locker1被thread2锁定而Go2(它具有被thread2锁定的_locker 1)是从thread1调用的?
static readonly object _locker1 = new object();
static readonly object _locker2 = new object();
public void Go(Object something)
{
lock (_locker1)
{
//Can I call Go2 which is locked by the same object?
Go2(something);
}
}
public void Go2(Object something)
{
lock (_locker1)
{
myList.Remove(something);
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释传递给锁的值是什么吗?
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |