所以我高高兴兴地从埃里克利珀阅读this,然后,当然,优秀的意见,并在他们John Payson说:为什么在这种情况下没有死锁?
一个更有趣的例子可能是使用两个静态类,因为这样的程序可能死锁而没有任何可见的阻塞语句。
,我想,是啊,这将会是容易的,所以我敲了这一点:
public static class A
{
static A()
{
Console.WriteLine("A.ctor");
B.Initialize();
Console.WriteLine("A.ctor.end");
}
public static void Initialize()
{
Console.WriteLine("A.Initialize");
}
}
public static class B
{
static B()
{
Console.WriteLine("B.ctor");
A.Initialize();
Console.WriteLine("B.ctor.end");
}
public static void Initialize()
{
Console.WriteLine("B.Initialize");
}
public static void Go()
{
Console.WriteLine("Go");
}
}
其输出(呼叫B.Go()
后):
B.ctor
A.ctor
B.Initialize
A.ctor.end
A.Initialize
B.ctor.end
Go
没有僵局,我显然是一个失败者 - 所以为了延续这个尴尬,这里是我的问题:为什么这里没有僵局?
这似乎是我的小的大脑,B.Initialize
被称为之前的B
静态构造函数已完成,我认为这是不允许的。
看到每个点的堆栈跟踪可能很有趣。 – leppie
如何建议死锁一个线程?一切正在同步发生...... –