Linux多线程基础学习(五)线程同步-条件变量

条件变量(cond)互斥锁有明显的缺点只有lock和unlock状态。设计多任务时容易死锁,使用也不灵活。而条件变量引入了信号弥补了互斥锁的不足。 与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。 条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主
摘要由CSDN通过智能技术生成

条件变量(cond)

互斥锁有明显的缺点只有lock和unlock状态。设计多任务时容易死锁,使用也不灵活。而条件变量引入了信号弥补了互斥锁的不足。

 

与互斥锁不同,条件变量是用来等待而不是用来上锁的。条件变量用来自动阻塞一个线程,直到某特殊情况发生为止。通常条件变量和互斥锁同时使用。

 

条件变量使我们可以睡眠等待某种条件出现。条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:

1、等待条件:一个线程等待"条件变量的条件成立"而挂起;

2、触发条件:另一个线程使"条件成立"(给出条件成立信号)。

 

使用时,条件变量被用来阻塞线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化一旦其他线程改变了变量,他将通知条件变量唤醒一个或者多个线程被这个条件变量阻塞的线程。被再次获得互斥锁,然后重新判断条件是否满足。

使用条件变量之前要先进行初始化。初始化方式有两种。

1、    静态初始化:可以在单个语句中生成和初始化一个条件变量如:

pthread_cond_tmy_condition=PTHREAD_COND_INITIALIZER;(用于进程间线程的通信)。

2、     动态初始化:动态申请内存后,利用函数pthread_cond_init动态初始化。和其他动态初始化一样,在释放内存之前需要先调用pthread_cond_destroy()。

 

条件变量类型为 pthread_cond_t

 

相关操作如下:

 int pthread_cond_init(pthread_cond_t*cond, pthread_condattr_t*cond_attr);//初始化
 int pthread_cond_wait(pthread_cond_t*cond, pthread_mutex_t*mutex);//等待条件成立
 int pthread_cond_timewait (pthread_cond_t*cond, pthread_mutex*mutex,consttimespec* abstime); //指定等待超时时间的等待函数,
 int pthread_cond_destroy(pthread_cond_t*cond); //清除条件变量:destroy
 int pthread_cond_signal(pthread_cond_t*cond); //激活条件变量
 int pthread_cond_broadcast(pthread_cond_t*cond);//解除所有线程的阻塞


 

1 初始化条件变量

使用pthread_cond_init()可以将cv所指示的条件变量初始化为其缺省值,或者指定已经使用pthread_condattr_init()设置的条件变量属性。

函数原型:


                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值