首页 新闻 会员 周边

多线程 Mutex 的疑问

0
悬赏园豆:5 [已解决问题] 解决于 2015-12-29 14:47

今天在温习多线程突然有个疑问?

code:

创建20线程 执行run方法 当第一个线程进来调用 waitone 进入等待 这个时候第2 、3 、xx线程都进来了 。都阻塞了  问题是第一次第一个线程调用waitone 也是阻塞了 它怎么就继续往下执行呢?

s_p的主页 s_p | 初学一级 | 园豆:138
提问于:2015-12-25 18:02
< >
分享
最佳答案
0

第一个线程进来后,调用mutex.WaitOne(),之后,mutex与这个线程绑定了,然后接着执行后面的语句,也就是会打印“当前数字 1”。然后线程执行完毕。只要这个线程不释放,也就是说mutex仍然与这个对象绑定着。其他线程就不能与metux进行绑定,故而就都阻塞了。

解决方案:

在Console.WriteLine("当前数字 {0}", ++count);后面调用:

mutex.ReleaseMutex();

收获园豆:5
乐享程序员 | 小虾三级 |园豆:930 | 2015-12-25 23:41

这个懂 疑问是 是第一个线程进来的 他怎么就往下走了   没有人对他ReleaseMutex

s_p | 园豆:138 (初学一级) | 2015-12-28 09:10

@s_p: 

因为第一个线程(T1)进来时,还没有任何线程与Mutex进行绑定,所以可以第一个线程与mutex就可以成功绑定。

其它线程(To)进来后需要等,是因为已经有线程与Mutex绑定了,它们需要等待与Mutex绑定的线程释放绑定后,然后这些线程(To)进行竞争,最终只有一个线程与Mutex进行绑定

乐享程序员 | 园豆:930 (小虾三级) | 2015-12-29 10:06
其他回答(1)
0

改成Mutex mutex =  new Mutex(true)再运行看看

jello chen | 园豆:7336 (大侠五级) | 2015-12-25 23:43
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册