在静态构造函数中创建线程
Making threads in static constructors
在下面的示例代码中,在静态构造函数中创建的线程似乎只在静态构造函数完成执行后才获得 运行。在这种情况下,由于等待,静态构造函数永远不会完成。
这是怎么回事?
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;
}
}
编辑:我在写废话。静态构造函数在锁下执行,以防止多个线程多次初始化静态 class。但是,您尝试在此初始化完成之前从多个线程访问 class,因此您的代码会导致死锁。
查看说明 here
在下面的示例代码中,在静态构造函数中创建的线程似乎只在静态构造函数完成执行后才获得 运行。在这种情况下,由于等待,静态构造函数永远不会完成。
这是怎么回事?
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;
}
}
编辑:我在写废话。静态构造函数在锁下执行,以防止多个线程多次初始化静态 class。但是,您尝试在此初始化完成之前从多个线程访问 class,因此您的代码会导致死锁。 查看说明 here