免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 14863 | 回复: 19
打印 上一主题 下一主题

条件变量为什么要用互斥锁来保护? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-03 18:22 |只看该作者 |倒序浏览
如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么?
所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?这个mutex的作用到底是什么?如果所有使用pthread_cond_wait的地方mutex参数各不相同,那么这个mutex参数是不是就相当于没有用了?
谢谢!!

论坛徽章:
0
2 [报告]
发表于 2011-12-03 18:26 |只看该作者
个人理解走到pthread_cond_wait后,如果条件不满足
该线程就休眠了,等待条件满足后被唤醒。节省了线程不断运行浪费的资源

论坛徽章:
0
3 [报告]
发表于 2011-12-03 18:28 |只看该作者
回复 2# 赤夜萌香


    是啊是啊我的理解和你完全一样 但整个过程中和mutex有半毛钱关系么?? 晕死我了 ..

论坛徽章:
0
4 [报告]
发表于 2011-12-03 18:30 |只看该作者
有关系,pthread_cond_wait内需要写入mutex变量参数

论坛徽章:
0
5 [报告]
发表于 2011-12-03 18:35 |只看该作者
回复 4# 赤夜萌香


    = =  囧   我就是想问设计者为什么要额外加这么一个mutex参数?如果不加会出什么问题?那些所谓“竞争”“保护”指的是什么?

    谢谢!

论坛徽章:
0
6 [报告]
发表于 2011-12-03 18:39 |只看该作者
这个解释起来,就涉及mutex了,你会用互拆锁的话,后面的应该也不难。
pthread_cond_wait他除了判断条件是否满足,还有控制mutex的功能,
如果不满足条件,他要先释放互拆锁,在进入睡眠中

论坛徽章:
0
7 [报告]
发表于 2011-12-03 18:45 |只看该作者
本帖最后由 赤夜萌香 于 2011-12-03 18:46 编辑

也不能说让pthread_cond_wait判断条件,这个条件还是编译者自己给的,
如一个while循环,循环里的条件不满足了,就不做pthread_cond_wait
满足就执行pthread_cond_wait,执行pthread_cond_wait就会进入睡眠,但是会在睡眠前先释放他控制的互拆锁

论坛徽章:
0
8 [报告]
发表于 2011-12-03 19:08 |只看该作者
回复 6# 赤夜萌香


    对,就是这里不明白。比如pthread_cond_wait (&COND , &MUTEX) ,那么这个函数只是简单地将三个类似 unlock(MUTEX), wait(COND), lock(MUTEX) 的函数原子地绑在一起而已么?如果是的话,那么这么做目的是什么?满足某个条件时也很有可能需要同时开始好多任务啊,为什么要强行lock掉呢?

论坛徽章:
0
9 [报告]
发表于 2011-12-03 19:18 |只看该作者
本帖最后由 赤夜萌香 于 2011-12-03 19:20 编辑

pthread_cond_wait,pthread_cond_signal
与pthread_mutex_lock,pthread_mutex_unlock;
是两部分,先有后者,后者使用上有不足处,故需要用前者来弥补。前者只是一个辅助弥补;

关键还是理解后者的用法,完全理解了,再去看前者是如何辅助lock与unlock的不足的;

如果还不能完全消化mutex部分就去看 cond会自然狠吃力,建议先完全理解mutex

论坛徽章:
0
10 [报告]
发表于 2011-12-03 19:37 |只看该作者
回复 9# 赤夜萌香


    多谢!好像明白了 ..  是不是因为mutex只有锁定与否,但继续运行的条件不只“mutex未锁”这么简单,所以用cond暂时阻塞并解锁以让出资源?

    如果是这样,那么如果我想实现一个简单得多的功能:当变量x为0时继续运行,此时mutex还有用么?直接写成 while (x) wait(&cond)就可以了是么?

    .. 也就是说 .. 条件变量从一开始就不是我所想象的那个用途么 ..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP