条件变量意义及使用规则

引入条件变量的意义,文章参见: http://www.blogjava.net/fhtdy2004/archive/2009/07/05/285519.html

ACE 条件变量核心伪代码:(版本:ACE-6.0.6)

cond_wait(Mutex &externalMutex)
 {
   lock(this.cv.waiterLock)
   ++cv.waiters_;  
   unlock(this.cv.waiterLock);
  
   unlock(externalMutex);//这样,post才会有机会去改变条件变量
  
   this.cv.sem.wait();//等待信号量 WaitForSingleObject
 
   lock(externalMutex);
   return ;
 }
 cond_tryTimeWait(Mutex &externalMutex);
 cond_post()
 {
  lock(this.cv.waiterLock);
  const bool haveWaiter = this.cv.waiters_>0?true:false;
  unlock(this.cv.waiterLock);
  
  if(haveWaiter )
     this.cv.sem.post(); //发送信号量 ReleaseSemaphore
   
  return ;
 }

 

条件变量的使用:

    Condition c;

线程一:

     lock(externalMutex);

     c.wait(externalMutex); //内部会执行 unlock(externalMutex), 并等待另一个线程发送条件通知。等待成功后,最后退出时执行lock(externalMutex);

     dosomething;//等待成功后执行具体工作。

     unlock(externalMutex);

线程二:

     lock(externalMutex);

     c.post(); //如果满足条件就发送消息,通知等待的线程

     dosomething;//等待成功后执行具体工作。

     unlock(externalMutex);

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值