#include<iostream>
#include<mutex>
#include<condition_variable>
#include<thread>
using namespace std;
class semaphere{
public:
semaphere(int n):m_count(n){}
semaphere(const semaphere& s)=delete;
semaphere & operator=(const semaphere& s)=delete;
void Wait(){
unique_lock<mutex> lc(m_mtx);
m_cv.wait(lc,[&]{return m_count>0;});
m_count--;..
}
void Signal(){
{
unique_lock<mutex> lc(m_mtx);
m_count++;
}
m_cv.notify_all();
}
private:
mutex m_mtx;
condition_variable m_cv;
int m_count;
};
一些重要的点
首先 unique_lock是在作用域内有效 默认一开始是加锁的了
条件变量 我的理解是 先对unique_lock 解锁,然后根据条件,如果(匿名函数写法)条件为真,那么获得锁,否则等待通知接着竞争锁,