最近的诸多面试经历确实让自己发现内功还不够,还需要持续的学习精进。
实现如下:
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(); }}