第一个线程进来后,调用mutex.WaitOne(),之后,mutex与这个线程绑定了,然后接着执行后面的语句,也就是会打印“当前数字 1”。然后线程执行完毕。只要这个线程不释放,也就是说mutex仍然与这个对象绑定着。其他线程就不能与metux进行绑定,故而就都阻塞了。
解决方案:
在Console.WriteLine("当前数字 {0}", ++count);后面调用:
mutex.ReleaseMutex();
这个懂 疑问是 是第一个线程进来的 他怎么就往下走了 没有人对他ReleaseMutex
@s_p:
因为第一个线程(T1)进来时,还没有任何线程与Mutex进行绑定,所以可以第一个线程与mutex就可以成功绑定。
其它线程(To)进来后需要等,是因为已经有线程与Mutex绑定了,它们需要等待与Mutex绑定的线程释放绑定后,然后这些线程(To)进行竞争,最终只有一个线程与Mutex进行绑定
改成Mutex mutex = new Mutex(true)再运行看看