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();
}
}