社区
其它技术问题
帖子详情
Linux中 条件变量为什么要用互斥锁来保护?
tptemp3
2011-12-03 05:27:58
如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么?
所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?如果所有使用pthread_cond_wait的地方mutex参数各不相同,那么这个mutex参数是不是就相当于没有用了?
谢谢!!
...全文
448
7
打赏
收藏
Linux中 条件变量为什么要用互斥锁来保护?
如果pthread_cond_wait只有cond*一个参数,pthread_cond_signal也只有cond*一个参数,一个用来等,一个用来唤醒,工作的也挺好的不是么? 所有书所有资料所有人都说“互斥锁用来保护条件变量”“防止竞争”等等,为什么要保护?防止什么竞争?如果所有使用pthread_cond_wait的地方mutex参数各不相同,那么这个mutex参数是不是就相当于没有用了? 谢谢!!
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用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
进程间同步——
互斥锁
与
条件变量
互斥锁
创建 //
互斥锁
是静态分配的(不是动态申请的) static pthread_mutex_t mutex_lock = PETHREAD_MUTEX_INITIALIZER; 加/解锁 #include <prhread.h> int pthread_mutex_lock(pthread_mutex_t mutex_lock); int pthread_mutex_trylock(pthread_mutex_t mutex_lock); //如果
互斥锁
被锁住,返回 E
添加锁
保护
实现 qt
linux
,
Linux
Qt使用POSIX多线程
条件变量
、
互斥锁
(量)
今天团建,但是文章也要写。酒要喝好,文要写美,方为我辈程序员的全才之路。嘎嘎之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用
条件变量
同步线程的例子。故此来和大家一起分享,希望和大家一起交流。提到线程,如果在UI编程
中
,总会和一些耗时操作联系在一起。Qt
中
处理耗时操作通常有两种方式,一种是将耗时操作放在线程
中
;另一种则是使用QApplication::processE...
Linux
C
互斥锁
和
条件变量
(POSIX标准)
与进程类似,线程也存在同步的问题,当多个控制线程共享相同的内存时,需要确保每个线程看到一致的数据视图,如果每个线程使用的变量都是其他线程不会读取或修改的(比如线程私有数据),就不会存在一致性问题。通常来说用户可以使用互斥量(
互斥锁
)或者的
条件变量
(条件锁)的方式来解决线程的同步问题。
互斥锁
互斥锁
是一个简单的锁定命令,它可以用来锁定共享资源使得其他线程无法访问。互...
Linux
线程
中
的
互斥锁
与
条件变量
【版权申明】转载请附上出处链接
Linux
线程
中
的
互斥锁
与
条件变量
1.
互斥锁
互斥锁
用于
保护
临界区资源(实际
保护
的是临界区
中
被操纵的数据),通常用于
保护
多个线程间的共享数据。而这些共享数据通常是一些可供线程间使用的全局变量/硬件寄存器等,为达到线程安全的目的,我们需要保证在任何时刻只有一个线程在执行其
中
的代码。 故
互斥锁
只有两个状态,即“上锁”和“未上锁”。
互斥锁
常见函数: // 头文件 #include <pthread.h> /* Initialize a mutex. */
线程同步:
互斥锁
条件变量
信号量
0000000000
其它技术问题
3,881
社区成员
9,044
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章