Contents

Eric Lipper的这篇博客举了一个C#中静态构造函数导致的deadlock的例子,很有意思。


代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
class C
{
static C()
{
// Let's run the initialization on another thread!
var thread = new System.Threading.Thread(Initialize);
thread.Start();
thread.Join();
}
static void Initialize() { }
static void Main() { }
}

原因很简单,静态构造函数需要在第一次用到这个类静态方法或者实例之前调用结束,就是说C()在等Initialize(),但是Initialize()必须在C()结束后才能被调到。

Contents