当前位置:  技术问答>linux和unix

关于条件变量的使用

    来源: 互联网  发布时间:2016-05-20

    本文导语:  条件变量是为我们所熟悉的。 linux中也提供了对条件变量的使用:pthread_cond_wait,pthread_cond_timedwait,pthread_cond_signal,pthread_cond_broadcast。 它们与sleep,wakeup的区别是什么呢? | pthread_cond_wait,pthread_cond_time...

条件变量是为我们所熟悉的。
linux中也提供了对条件变量的使用:pthread_cond_wait,pthread_cond_timedwait,pthread_cond_signal,pthread_cond_broadcast。
它们与sleep,wakeup的区别是什么呢?

|
pthread_cond_wait,pthread_cond_timedwait,pthread_cond_signal,pthread_cond_broadcast主要用于进程中的线程同步,是用户空间不同线程的同步机制,以防止对criticl资源的不正确访问,对于不同的系统,起实现方式也不同,有的实现可能不需要内核的参与,下面是这几个函数的含义,具体可以参看:http://blog.csdn.net/gogofly_lee/archive/2008/04/15/2293465.aspx

# pthread_cond_wait()会阻塞调用的线程,直到特定的条件(condition)满足,当这个线程运行时,mutex会被 加锁,当它阻塞时mutex会自动解锁。当收到信号唤醒线程时,mutex会被线程自动上锁, 当线程完成更新共享数据后,开发者有责任解锁mutex。
# pthread_cond_signal()用来通知(唤醒)等待在条件变量上的另一线程,在mutex 被加锁后被调用,在完成pthread_cond_wait()运行后必须解锁mutex。
# 如果多于一个线程处于阻塞状态,应该用pthread_cond_broadcast()代替pthread_cond_signal()。
# 如果在调用pthread_cond_wait()前先调用pthread_cond_signal()就是逻辑错误

sleep,wakeup主要用于内核,当然在用户空间也有相应的函数,主要用于相应的进程由于各种原因主动释放CPU等各种系统资源。对于手持设备来说,用户空间的sleep,wakeup函数更侧重于实施系统的电源管理。

|
从用户空间来说, 
    pthread_cond_wait,pthread_cond_timedwait 就是用来sleep的一种机制,
    而对应的 pthread_cond_signal,pthread_cond_broadcast是用来wake up的一种机制。


我说在内核空间有类似的东西。但是用户空间的和内核空间的这两类事物确实不是同一类东西。
要不就是我没说清,要不就是你没说清,呵呵。

|
楼主很懒,问问题的态度还比较差!

|
不懂,帮顶

|
该回复于2010-07-02 14:40:46被版主删除

    
 
 

您可能感兴趣的文章:

  • c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
  • 条件变量和互斥量区别
  • linux里的条件变量到底有什么用?感觉和mutex差不多啊
  • 关于多线程编程的条件变量问题
  • 关于条件变量的问题
  • 条件变量是不是一定要搭配互斥锁才能发挥作用?
  • 条件编译可以使用全局变量吗?
  • 一个线程里头可以等待多过条件变量吗?
  • 有关条件变量的源代码在哪找得到呢?
  • 线程里互斥和条件变量一起使用的问题,有点迷惑.
  • 我觉得POSIX的线程里的条件变量的API设计得很不合理!
  • 看到线程的条件变量这部分时有些糊涂!
  • 【求助】请教一下关于条件变量的一个问题。
  • 帮忙看看makefile 中关于变量的条件赋值 的问题吧?不搞定我下周就死了
  • 如何不留后遗症地取消处于等待条件变量信号的线程?
  • 条件变量和互斥量结合的使用问题
  • 关于 互斥和条件变量 的疑问
  • SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
  • 谁知道条件变量的用法??用 pthread_cond_timedwait()时遇到了问题
  • pthread_cond_timedwait带时间的线程同步条件变量用法,请教!谢谢
  • 互斥锁和条件变量同步线程等待超时程序问题
  • MySQL中使用case when 语句实现多条件查询的方法
  • 关于在shell中使用循环和条件判断的问题( 内详)
  • Python数组条件过滤filter函数使用示例
  • 在shell中使用数组需要什么特殊的条件马? 怎么在有的linux下能够用,在有的linux下就不能能使用?
  • MYSQL中有关SUM字段按条件统计使用IF函数(case)问题
  • 使用TSL命令实现进程同步和互斥来防止竞争条件!
  • Thinkphp使用mongodb数据库实现多条件查询方法
  • CSS条件注释的使用详解教材
  • 不同版本IE使用不同css(css条件注释语句用法)
  • 进程间通信:pthread_cond使用在线程间,我要进程间条件同步(没有情缘关系的进程),采用什么方呢?也就是说我要在UNIX实现WIN32上命名Event的功能
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Lists(链表) 成员 remove_if():按指定条件删除元素
  • 散分(有条件,很简单的条件)
  • win7,win8安装docker的依赖条件
  • 编程语言 iis7站长之家
  • Mysql设置查询条件(where)查询字段为NULL
  • 删除一定条件下列出的文件
  • 带搜索条件的分页怎么做?
  • linux->shell-> if 条件判断,关于软连接的判断!
  • Shell条件判断疑问?
  • 如何在Makefile中定义宏进行条件编译?
  • 预处理器条件删除工具 unifdef
  • 编译条件“-lpthread”应该加在makefile的哪里阿?
  • 有无条件等待指令吗?
  • linux环境下oracle条件导出数据的shell脚本怎么写
  • 有n个进程的系统出现死锁,死锁进程个数k应该满足什么条件?
  • 动态生成的查询条件其参数传递如何实现?
  • grep 搜索条件与的问题
  • shell编程 if语句的条件总是被判断为真
  • python字典多条件排序方法实例
  • 关于可移植代码中的条件编译
  • 一个条件null问题(C shell)高分


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3