// 锁和条件变量实现信号量
#include <thread>
#include <condition_variable>
#include <mutex>
class Sem_W{
public:
//单变量 + explicit 防止隐式转换
explicit Sem_W(int value = 0) : value_(value) {}
void Sem_signal() {
std::unique_lock<std::mutex> lock(mutex_);
++value_;
cond_.notify_one();
}
void Sem_wait() {
std::unique_lock<std::mutex> lock(mutex_);
while(value_ <= 0) {
cond_.wait(lock);
}
--value_;
cond_.notify_one();
}
private:
int value_;
std::condition_variable cond_;
std::mutex mutex_;
};
看了《操作系统导论》,用把锁、条件变量和一个状态的变量来记录信号量的值,尚未测试此功能。