原文链接: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?相关推荐

  1. Java Condition类使用及分析

    一.Condition介绍 Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作,相比使用Object的wait().noti ...

  2. java Condition类的详细介绍

    一 .condition 介绍及demo Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作,相比使用Object的wait ...

  3. java 线程同步condtion_Java:多线程,使用同步锁(Lock)时利用Condition类实现线程间通信...

    [我们不仅可以使用synchronized来实现多线程同步,还可以通过创建锁对象来实现多线程的同步,还是上次模拟取现的操作,这次利用lock对象实现同步,下面是代码:    import 如果程序不使 ...

  4. Python的线程18 Condition类实现田径运动场景

    正式的Python专栏第55篇,同学站住,别错过这个从0开始的文章! 前篇学委简单介绍了Condition类.这个类有几个特别的函数. 当一个裁判员获取锁,然后执行notify_all函数后,其他运动 ...

  5. Python的线程17 Condition类,田径赛场上的主裁判

    正式的Python专栏第54篇,同学站住,别错过这个从0开始的文章! 前面介绍了死锁,Lock,Rlock,这篇我们介绍一下Condition Condition 是什么? 这个类跟Lock和Rloc ...

  6. Java中的condition类

    Java中的condition类 Condition是在java 1.5中才出现的,它用来替代传统的Object的wait().notify()实现线程间的协作, 相比使用Object的wait(). ...

  7. 1.5 深入理解常见类

    第5章 深入理解常见类 5.1 概述 初次接触Android源码,最多见到的一定是sp和wp.如果你只是沉迷于Java世界,那么Looper和Handler也是避不开的.本章的目的,就是把经常碰见的这 ...

  8. [深入理解Android卷一全文-第五章]深入理解常见类

    由于<深入理解Android 卷一>和<深入理解Android卷二>不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容. ...

  9. 深入理解Andorid 卷I 第五章

    PDF版的下载见: http://download.csdn.net/source/3578482 感谢CSDN及其热心支持的网友们,希望这本书是我对大家最好的回报.这一章重点解决sp,wp,refb ...

最新文章

  1. 大型电商网站详情页是如何支撑亿级流量访问的?
  2. uninque()用法
  3. 谢烟客---------Linux之文件安全上下文及特殊权限位
  4. 【PC工具】更新图片批量处理工具Image Tuner,绿色免安装工具软件
  5. 如何读论文?-如何写好科技论文之我见(八)
  6. php基础篇-二维数组排序 array_multisort
  7. P1506 拯救oibh总部(染色+dfs)
  8. 不够优秀就不要腆着脸继续占便宜——作者:杨毅
  9. Linux——grep文本搜索命令
  10. C# 生成全球唯一标识符
  11. 埃及分数(codevs 1288)
  12. 阿里云高性能时序数据库 TSDB 启动公测,为物联网而生的数据库!
  13. 全网首发:LINUX编译JNA:编译libffi
  14. RQNOJ 能量项链
  15. uni-app 使用 @touchmove.stop.prevent 导致弹框内容无法滚动
  16. 【蓝桥杯】第十三届蓝桥杯省赛 AK 攻略 —— C++ B组全真题超详细剖析
  17. python多元线性回归报错(assert pytype not in (tokenize.NL, tokenize.NEWLINE))
  18. Zabbix 监控MySQL最大连接数
  19. 计算机日常故障DIY维修有哪些,计算机维护 DIY 完全手册
  20. Python Twisted系列教程7:小插曲,Deferred

热门文章

  1. JAVA复习5(集合——HashSet)
  2. r语言将百分数化为小数_C语言入门学习(一)
  3. 红帽子linux改ip命令,RedHat 7 修改IP地址
  4. 基于VHDL自动售邮票机设计
  5. 手机桌面隐藏大师_应用加密,教你一招隐藏手机桌面上的软件!
  6. 山师计算机试题答案,山师计算机应用技术试题及答案
  7. 二值化处理c语言程序,数字信号处理c语言程序集
  8. java8 stringbuilder_为什么 Java 8 中不再需要 StringBuilder 拼接字符串
  9. python如何读取数据保存为新格式_Python Numpy中数据的常用保存与读取方法
  10. 卷文件系统根目录仅剩余0字节_Linux Ext4文件系统的老祖宗长什么样