大家好,我正在提高我的多线程 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);
}
}
}
}
如果两个线程同时运行,则存在死锁的风险。
谢谢
请您参考如下方法:
- 以一致的顺序上锁
- 让你的锁尽可能细化
- 尽可能使用不可变数据结构避免锁定
- 使用 Monitor.TryEnter 而不是锁定(不会超时)
