在以下示例代码中,似乎仅在静态构造函数执行完之后才运行在静态构造函数中创建的线程。在这种情况下,导致静态构造函数由于等待而无法完成。
这是怎么回事?
using System;
using System.Threading;
static public class Test
{
static public bool isDone = false;
static Test()
{
Thread a = new Thread(TestThread);
a.Priority = ThreadPriority.Highest;
a.Start();
while (!isDone)
Thread.Sleep(1);
Console.WriteLine(isDone);
}
static private void TestThread()
{
isDone = true;
}
}
答案 0 :(得分:1)
编辑:我在胡说八道。静态构造函数在锁下执行,以防止多个线程多次初始化静态类。但是,您尝试在此初始化完成之前从多个线程访问您的类,因此您的代码导致死锁。 请参阅说明here