为什么Thread.Sleep同步线程?

Dim*_*zyr -1 c# multithreading

没有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);
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 5

两种方式都是异步工作的,毕竟你有2个线程.

当你启动线程并且没有睡眠时,它执行得如此之快,以至于它设法Secondary在其分配的时间片内输出5 行.

这个Sleep调用会减慢一切,因为你正在睡眠一段相当大的时间(与线程时间片相比),它会让线程的外观逐步运行.

但是,这只是运气.没有什么可以阻止线程调度程序M0在进入lock一段时间之前决定挂起,允许主线程完全执行其循环.