社区
其它技术问题
帖子详情
Linux中 条件变量为什么要用互斥锁来保护?
tptemp3
2011-12-03 05:27:58
如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么?
所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?如果所有使用pthread_cond_wait的地方mutex参数各不相同,那么这个mutex参数是不是就相当于没有用了?
谢谢!!
...全文
387
7
打赏
收藏
Linux中 条件变量为什么要用互斥锁来保护?
如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么? 所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?如果所有使用pthread_cond_wait的地方mutex参数各不相同,那么这个mutex参数是不是就相当于没有用了? 谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
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页有个讲解,可以看一下。
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
Linux
互斥锁
、
条件变量
和信号量
linux
无亲缘关系间进程同步通信实现(
互斥锁
+
条件变量
+共享内存模式)
说明:编译时加上参数 -lrt -lpthread 要不然找不到库文件
linux
无亲缘关系进程间通信(
互斥锁
+
条件变量
+共享内存)
使用
互斥锁
+
条件变量
+共享内存的模式实现
linux
下亲缘关系间进程间同步通信 说明编译时加上 -lrt -lpthread参数
浅谈
互斥锁
为什么还要和
条件变量
配合使用
mutex体现的是一种竞争,我离开了,通知你进来。 cond体现的是一种协作,我准备好了,通知你开始吧。
互斥锁
一个明显的缺点是它只有两种状态:锁定和非锁定。而
条件变量
通过允许线程阻塞和等待另一个线程发送信号的方法弥补了
互斥锁
的不足,它常和
互斥锁
一起配合使用。使用时,
条件变量
被用来阻塞一个线程,当条件不满足时,线程往往解开相应的
互斥锁
并等待条件发生变化。一旦其他的某个线程改变了
条件变量
,他将通知相应的
条件变量
唤醒一个或多个正被此
条件变量
阻塞的线程。这些线程将重新锁定
互斥锁
并重新测试条件是否满足。一般说来,
条件变量
被用来进行线程间的同步。 两个线程操作同一临界区时,通过
互斥锁
保护
,若A线程已经加
Linux
C 多线程编程之
互斥锁
与
条件变量
实例详解
一、
互斥锁
互斥量从本质上说就是一把锁, 提供对共享资源的
保护
访问。 1. 初始化: 在
Linux
下, 线程的互斥量数据类型是pthread_mutex_t. 在使用前, 要对它进行初始化: 对于静态分配的互斥量, 可以把它设置为PTHREAD_MUTEX_INITIALIZER, 或者调用pthread_mutex_init. 对于动态分配的互斥量, 在申请内存(malloc)之后, 通过pthread_mutex_init进行初始化, 并且在释放内存(free)前需要调用pthread_mutex_destroy. 原型: int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restric attr); int pthread_mutex_destroy(pthread_mutex_t *mutex); 头文件: 返回值: 成功则返回0, 出错则返回错误编号. 说明: 如果使用默认的属性初始化互斥量, 只需把attr设为NULL. 其他值在以后讲解
其它技术问题
3,882
社区成员
9,046
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章