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)
两种方式都是异步工作的,毕竟你有2个线程.
当你启动线程并且没有睡眠时,它执行得如此之快,以至于它设法Secondary在其分配的时间片内输出5 行.
这个Sleep调用会减慢一切,因为你正在睡眠一段相当大的时间(与线程时间片相比),它会让线程的外观逐步运行.
但是,这只是运气.没有什么可以阻止线程调度程序M0在进入lock一段时间之前决定挂起,允许主线程完全执行其循环.
| 归档时间: |
|
| 查看次数: |
39 次 |
| 最近记录: |