免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 埋头苦编
打印 上一主题 下一主题

请高手解释下程序运行过程:多线程加锁阻塞问题 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2011-11-23 16:31 |只看该作者
回复 26# 1514_louluo
刚开始就创建了6个锁,难道不initializer就不存在马?

论坛徽章:
0
32 [报告]
发表于 2011-11-23 16:39 |只看该作者
回复 30# 埋头苦编


   不好意思,我的意思是说锁住bcdef。你初始化的时候如果不锁住bcdef的话,刚开始你的a先锁上自己,然后释放b的锁,注意b这个时候是没有锁的,有可能它已经执行到write了,这时你的a把b的锁释放了,这个时候b又没有锁了,所以下一次cpu调度可能b又锁住自己,然后write。。。这样就都乱了。如果初始化的时候就锁住bcdef,每次b都要等到a释放b锁以后才会执行write,然后c又等着b释放c锁。。。这样才是你想要的顺序~~!请lz再仔细琢磨琢磨!!

论坛徽章:
0
33 [报告]
发表于 2011-11-23 16:40 |只看该作者
回复 26# 1514_louluo

你这加锁锁住了线程,合理马?

论坛徽章:
0
34 [报告]
发表于 2011-11-23 16:44 |只看该作者
回复 33# 埋头苦编

为了实现顺序输出嘛~~我想楼主应该已经理解为什么会出现乱序的原因了吧~

论坛徽章:
0
35 [报告]
发表于 2011-11-23 16:45 |只看该作者
回复 29# asuka2001
乱序,呵呵,什么情况都有可能,你再想想,如果因为系统调度机制,那么头个轮回就不应该每一次都是顺序的阿!

论坛徽章:
0
36 [报告]
发表于 2011-11-23 16:50 |只看该作者
回复 34# 1514_louluo

你这样有几个问题:1循环里会锁上加锁,导致未定义行为,
                                    2怎么解锁
                                    3 这成了单线程了

论坛徽章:
0
37 [报告]
发表于 2011-11-23 16:58 |只看该作者
回复 36# 埋头苦编


    楼主,这只是就事论事而已嘛~出发点是为了高明白为什么会出现输出乱序的问题嘛,现在应该都分析的差不多了,至于实现的方法不一定非要用这个嘛~你说是吗?兄弟

论坛徽章:
0
38 [报告]
发表于 2011-11-23 17:01 |只看该作者
回复 23# digdeep126 [/
我这里是多个互斥量的时候是怎么加锁的没搞明白,知道的话能指教下马

论坛徽章:
0
39 [报告]
发表于 2011-11-23 17:07 |只看该作者
回复 37# 1514_louluo
我们是为了学知识,不是为了让这个程序达到想要的结果,直接printf abcd也行阿,就是学多线程阿,哥们,你来个单线程,而且你说的还是让人没怎么明白,如果向你说的,那应该乱到死锁,而不是乱许

论坛徽章:
0
40 [报告]
发表于 2011-11-23 17:24 |只看该作者
忽然想到:
哪个线程“上的锁”,必须要该线程来“解锁”。否则其它的线程就不能获得该锁。其它的线程并不能来解锁该线程上的锁。(有点饶口,
比如说线程A对lock1加锁,那么只有线程A能够对lock1解锁,线程B并不能对“线程A加在lock1上的锁”进行解锁!

所以说,这个程序的代码,完全是错误的!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP