以下代码是否会在.NET上使用C#导致死锁?
class MyClass
{
private object lockObj = new object();
public void Foo()
{
lock(lockObj)
{
Bar();
}
}
public void Bar()
{
lock(lockObj)
{
// Do something
}
}
}
Run Code Online (Sandbox Code Playgroud) 在一个项目我正在玩线程.我试图建立一个不会"破坏"数据的安全线程.我的线程在后台运行,并在另一个类上调用函数,我可以调用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 …Run Code Online (Sandbox Code Playgroud)