代码来自:https://zhuanlan.zhihu.com/p/462668211
#ifndef _SEMAPHORE_H #define _SEMAPHORE_H #include 1. 信号量的定义 2. 使用std::mutext与std::condition_variables实现信号量 #include using namespace std; class Semaphore { public: Semaphore(long count = 0) : count(count) {} //V操作,唤醒 void signal() { unique_lock unique(mt); ++count; //原文这块有点问题,shanql //if (count <= 0) // cond.notify_one(); cond.notify_one(); } //P操作,阻塞 void wait() { unique_lock unique(mt); --count; //if (count < 0) //原文这块有点问题,shanql while( count < 0 ) cond.wait(unique); } private: mutex mt; condition_variable cond; long count; }; #endif