天天看點

C++ 互斥鎖和條件變量實作讀寫鎖

class RWLock{
  private:
    int state;
    mutex mu;
    condition_variable cond;
  public:
  RWLock():state(0){}

  void rlock(){
    mu.lock();
    while(state < 0){
      cond.wait(mu);
    }
    state++;
    mu.unlock();
  }
  
  void runlock(){
    mu.lock();
    if(--state == 0) {
      cond.notify_one();//叫醒一個等待的寫操作
    }
    mu.unlock();
  }
  
  void wlock(){
    mu.lock();
    while(state!=0){
      cond.wait(mu);
    }
    state = -1;
    mu.unlock();
  }

  void wunlock(){
    mtx.lock();  
        stat = 0;  
        cond.notify_all(); // 叫醒所有等待的讀和寫操作  
        mtx.unlock();  
  }
}