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

你可能感兴趣的:(#,编程语言:C++,编程语言)