【发布时间】:2016-11-30 21:08:50
【问题描述】:
我在书中找到了这个例子。而且据说这段代码会导致死锁。但我不明白,也不明白为什么会这样? 我总是得到
“锁定 B 和 A”
“锁定 A 和 B”
static void Main()
{
object lockA = new object();
object lockB = new object();
var up = Task.Run(() =>
{
lock (lockA)
{
Thread.Sleep(1000);
lock (lockB)
{
Console.WriteLine(“Locked A and B”);
}
}
});
lock (lockB)
{
lock (lockA)
{
Console.WriteLine(“Locked B and A”);
}
}
up.Wait();
Console.ReadLine();
}
【问题讨论】:
-
在你获得
lockB之后,尝试在主线程中添加一个睡眠。 -
10/10 结果是死锁。为什么会这样?我认为它应该是一些多样性。
标签: c# .net parallel-processing task-parallel-library task