Condition类必须配合Mutex使用,why?
原文链接:http://blog.sina.com.cn/s/blog_967817f20101bsf0.html
参考链接:http://www.cnblogs.com/Dahaka/archive/2012/02/19/2358528.html
因为pthread_cond_wait函数包含了很多操作,在wait之前和之后必须要手动加锁/解锁mutex,保证同一时间只有一个人对条件变量cond进行使用。
wait函数开始和结束的地方有解锁/加锁mutex,下面贴出源码:
android-2.2.2_r1\bionic\libc\bionic\pthread.c
1 int __pthread_cond_timedwait_relative(pthread_cond_t *cond, 2 pthread_mutex_t * mutex, 3 const struct timespec *reltime) 4 { 5 int status; 6 int oldvalue = cond->value; 7 int wait_op = COND_IS_SHARED(cond) ? FUTEX_WAIT : FUTEX_WAIT_PRIVATE; 8 9 pthread_mutex_unlock(mutex); 10 status = __futex_syscall4(&cond->value, wait_op, oldvalue, reltime); 11 pthread_mutex_lock(mutex); 12 13 if (status == (-ETIMEDOUT)) return ETIMEDOUT; 14 return 0; 15 }
转载于:https://www.cnblogs.com/luzhiyuan/p/4380793.html
Condition类必须配合Mutex使用,why?相关推荐
- Java Condition类使用及分析
一.Condition介绍 Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作,相比使用Object的wait().noti ...
- java Condition类的详细介绍
一 .condition 介绍及demo Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作,相比使用Object的wait ...
- java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...
[我们不仅可以使用synchronized来实现多线程同步,还可以通过创建锁对象来实现多线程的同步,还是上次模拟取现的操作,这次利用lock对象实现同步,下面是代码: import 如果程序不使 ...
- Python的线程18 Condition类实现田径运动场景
正式的Python专栏第55篇,同学站住,别错过这个从0开始的文章! 前篇学委简单介绍了Condition类.这个类有几个特别的函数. 当一个裁判员获取锁,然后执行notify_all函数后,其他运动 ...
- Python的线程17 Condition类,田径赛场上的主裁判
正式的Python专栏第54篇,同学站住,别错过这个从0开始的文章! 前面介绍了死锁,Lock,Rlock,这篇我们介绍一下Condition Condition 是什么? 这个类跟Lock和Rloc ...
- Java中的condition类
Java中的condition类 Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作, 相比使用Object的wait(). ...
- 1.5 深入理解常见类
第5章 深入理解常见类 5.1 概述 初次接触Android源码,最多见到的一定是sp和wp.如果你只是沉迷于Java世界,那么Looper和Handler也是避不开的.本章的目的,就是把经常碰见的这 ...
- [深入理解Android卷一全文-第五章]深入理解常见类
由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...
- 深入理解Andorid 卷I 第五章
PDF版的下载见: http://download.csdn.net/source/3578482 感谢CSDN及其热心支持的网友们,希望这本书是我对大家最好的回报.这一章重点解决sp,wp,refb ...
最新文章
- 大型电商网站详情页是如何支撑亿级流量访问的?
- uninque()用法
- 谢烟客---------Linux之文件安全上下文及特殊权限位
- 【PC工具】更新图片批量处理工具Image Tuner,绿色免安装工具软件
- 如何读论文?-如何写好科技论文之我见(八)
- php基础篇-二维数组排序 array_multisort
- P1506 拯救oibh总部(染色+dfs)
- 不够优秀就不要腆着脸继续占便宜——作者:杨毅
- Linux——grep文本搜索命令
- C# 生成全球唯一标识符
- 埃及分数(codevs 1288)
- 阿里云高性能时序数据库 TSDB 启动公测,为物联网而生的数据库!
- 全网首发:LINUX编译JNA:编译libffi
- RQNOJ 能量项链
- uni-app 使用 @touchmove.stop.prevent 导致弹框内容无法滚动
- 【蓝桥杯】第十三届蓝桥杯省赛 AK 攻略 —— C++ B组全真题超详细剖析
- python多元线性回归报错(assert pytype not in (tokenize.NL, tokenize.NEWLINE))
- Zabbix 监控MySQL最大连接数
- 计算机日常故障DIY维修有哪些,计算机维护 DIY 完全手册
- Python Twisted系列教程7:小插曲,Deferred
热门文章
- JAVA复习5(集合——HashSet)
- r语言将百分数化为小数_C语言入门学习(一)
- 红帽子linux改ip命令,RedHat 7 修改IP地址
- 基于VHDL自动售邮票机设计
- 手机桌面隐藏大师_应用加密,教你一招隐藏手机桌面上的软件!
- 山师计算机试题答案,山师计算机应用技术试题及答案
- 二值化处理c语言程序,数字信号处理c语言程序集
- java8 stringbuilder_为什么 Java 8 中不再需要 StringBuilder 拼接字符串
- python如何读取数据保存为新格式_Python Numpy中数据的常用保存与读取方法
- 卷文件系统根目录仅剩余0字节_Linux Ext4文件系统的老祖宗长什么样