浅谈Linux条件变量的使用
Linux线程同步之间存在多种机制,条件变量是一种类似操作系统里提到的生产者-消费者算法的同步机制,允许线程以无竞争的方式等待特定条件的发生。
示例伪代码:
void* Thread1(void){
  while(线程运行条件成立){
    …
    pthread_mutex_lock(qlock);
    while(条件成立)
pthread_cond_wait(qcond,qlock);
或者
pthread_cond_wait(qcond,qlock,timeout);
      reset条件变量…
    pthread_mutex_unlock(qlock);
  }
}
void* Thread2(void){
  while(线程运行条件成立){
    …
    pthread_mutex_lock(qlock);
    set了条件变量…//可以发送处理信号
    pthread_cond_signal(qcond);
    或者
    pthread_cond_broadcast(qcond);
    pthread_mutex_unlock(qlock);
  }
}条件变量需要配合互斥量一起使用,互斥量作为参数传入wait函数,函数把调用线程放到等待条件的线程列表上,然后对互斥量解锁,这两个是原子操作。当线程等待到条件,从wait函数返回之前,会再次锁住互斥量。
1.Lock 
2.Unlock 
3.等待 
4.Lock 
5.Unlock 
第2,3,4步是wait的内部操作
在wait被唤醒后,还需要在while中去检查条件,这是为了防止“惊群效应”,比如有两个线程同时阻塞在wait,先后醒来,快的线程做完处理然后把条件reset了,并且对互斥量解锁,此时慢的线程在wait里获得了锁(即第4步)返回,还再去做处理就会出问题。
相关推荐
  Magicsoftware    2020-06-01  
   sschencn    2020-01-18  
   arctan0    2020-10-14  
   hackerlpy    2020-09-25  
   大唐帝国前营    2020-08-18  
   yuanlu    2020-08-17  
   chunjiekid    2020-08-16  
   cuiweisaidelike    2020-08-02  
   comeonxueRong    2020-08-02  
   zzqLivecn    2020-07-09  
   yunfeitian    2020-07-05  
   hell0kitty    2020-07-04  
   TreasureZ    2020-06-25  
   阿亮    2020-06-21  
   fengjing81    2020-05-08  
   小菜鸟的代码世界    2020-06-17  
   凉白开    2020-06-17  
   gzx0    2020-06-14  
   fengling    2020-05-31  
 