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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中 条件变量为啥要用互斥锁来保护?相关的知识,希望对你有一定的参考价值。

如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么? 所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?如果所有使用pth... ,pthread_cond_signal也只有cond*一个参数? 谢谢,那么这个mutex参数是不是就相当于没有用了,工作的也挺好的不是么?防止什么竞争?如果所有使用pthread_cond_wait的地方mutex参数各不相同,为什么要保护? 所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,一个用来唤醒,一个用来等如果pthread_cond_wait只有cond*一个参数 展开

参考技术A 互斥锁一个明显的缺点是他只有两种状态:锁定和非锁定。而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,他常和互斥锁一起使用。使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。一旦其他的某个线程改变了条件变量,他将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。这些线程将重新锁定互斥锁并重新测试条件是否满足。一般说来,条件变量被用来进行线承间的同步。
可以总结为:条件变量用在某个线程需要在某种条件才去保护它将要操作的临界区的情况下,从而避免了线程不断轮询检查该条件是否成立而降低效率的情况,这是实现了效率提高。。。
在条件满足时,自动退出阻塞,再加锁进行操作。
Linux下C编程的条件变量:  条件变量是线程中的东西,就是等待某一条件的发生和信号一样  以下是说明:  条件变量使我们可以睡眠等待某种条件出现。  条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条件变量的条件成立"而挂起;另一个线程使"条件成立"(给出条件成立信号)。为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。

以上是关于Linux中 条件变量为啥要用互斥锁来保护?的主要内容,如果未能解决你的问题,请参考以下文章

linux 条件变量

线程资源同步——互斥量和条件变量

四十Linux 线程——线程同步之条件变量

(转载)Linux 多线程条件变量同步

pthread为啥规定cond要和mutex一起使用

Linux学习_线程条件变量和状态转移图