为什么没有Thread.Sleep
线程将异步工作(1),并且同步(2)?
class A
{
static object locker = new object();
static void M0()
{
for(int i = 0; i < 5; i++)
lock (locker)
{
Console.WriteLine("Secondary");
//Thread.Sleep(100);
}
}
static void Main()
{
ThreadStart ts = new ThreadStart(M0);
Thread t = new Thread(ts);
t.Start();
for (int i = 0; i < 5; i++)
lock (locker)
{
Console.WriteLine("Primary");
//Thread.Sleep(100);
}
}
}
答案 0 :(得分:5)
两种方式都是异步工作的,毕竟你有2个线程。
当您启动线程并且没有睡眠时,它执行得如此之快,以至于它设法在其分配的时间片内输出5 Secondary
行。
Sleep
调用减慢了一切,因为你正在睡眠一段相当大的时间(与线程时间片相比),它会让线程的外观一步一步地运行。
然而,这只是运气。没有什么可以阻止线程调度程序在它进入M0
之前决定暂停lock
一段时间,该时间段允许主线程完全执行其循环。