Linux中 条件变量为什么要用互斥锁来保护?

tptemp3 2011-12-03 05:27:58
如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么?
所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?如果所有使用pthread_cond_wait的地方mutex参数各不相同,那么这个mutex参数是不是就相当于没有用了?
谢谢!!
...全文
387 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
by_winds 2013-04-02
  • 打赏
  • 举报
回复
三楼的回答比较靠谱,其它全是所问非所答,要么是照本宣科装“专家”! 因为条件变量是为了通讯的两个线程之间使用,所以要保证两个相关线程之间对这个资源的使用,如果不保护,则如果存在第三个进程pthread_cond_signal这个条件。 条件变量存在的意义我想是 限定两个线程之间进行可靠同步。因为互斥锁不能跨线程,信号量不对线程数目进行限制。
awsqsh 2012-02-11
  • 打赏
  • 举报
回复
现在都是多任务 多线程 怕其他线程 什么的 改变那个变量值 出现数据不一致 所以就要保护起来。
huhaifengasd 2012-02-11
  • 打赏
  • 举报
回复
唤醒好像是一般等待某件事情完成然后唤醒一个状态。如果步加锁 进程同步会出问题
lys86_1205 2012-02-11
  • 打赏
  • 举报
回复
你好好看看unix高级编程,在unix中互斥锁是很重要的,好好看看关于互斥的几个函数是怎样执行的
stevens 2011-12-21
  • 打赏
  • 举报
回复
建议你好好看一下 unix system programming 这本书 基础课 必修。
seucs 2011-12-04
  • 打赏
  • 举报
回复
条件变量也是一种互斥使用的资源,所以要有一个mutex来保护它,因为在pthread_cond_wait里有V操作和P操作,只是由调用的函数pthread_cond_wait来调用这两个PV操作,你这样理解就行了
nuaazdh 2011-12-04
  • 打赏
  • 举报
回复
建议你看一下操作系统中“进程同步”部分内容,如果不设置互斥,由于对参数cond*的运算最终在机器上通过寄存器实现,如果两个进程不采用互斥锁的话,执行顺序的不同可能导致两个进程中同一个参数cond*的值不一致,《操作系统概念》第六版翻译版 第143页有个讲解,可以看一下。

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧