条件变量意义及使用规则

引入条件变量的意义,文章参见: 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);

 

 

你可能感兴趣的:(ACE)