大家好,我正在提高我对多线程C#的了解,并想知道如何解决这个经典的死锁问题。
public class SomeClass
{
private object _lock1 = new object();
private object _lock2 = new object();
public void Method1()
{
lock (_lock1)
{
Thread.Sleep(10000);
lock (_lock2)
{
Thread.Sleep(10000);
}
}
}
public void Method2()
{
lock (_lock2)
{
Thread.Sleep(10000);
lock (_lock1)
{
Thread.Sleep(10000);
}
}
}
}
如果两个线程同时运行,则存在死锁的风险。
谢谢
答案 0 :(得分:2)
答案 1 :(得分:2)
这不是C#问题,它更为通用。 你的例子显然不正确。 尽量避免锁定imbrication是你最终陷入僵局的常见模式。 有一本关于同步的好书: http://greenteapress.com/semaphores/
答案 2 :(得分:0)
您必须始终以相同的顺序获取锁定:首先锁定一个,然后锁定两个,依此类推。 您不需要总是占用所有锁:例如,您可以让method1()获取lock1和lock2,而method2()只接受lock2,它不会导致死锁。