Windows 下 有 CreateSemaphore 来创建信号量,c++ 11 没有实现信号量,可以用条件变量来模拟信号量:
class CSemaphore
{
public:
CSemaphore();
~CSemaphore();
void semaphoreP(unsigned int timeout = 0)
{
std::unique_lock<std::mutex> l(m_lock);
while(m_cnt <= 0){
std::cv_status ret = m_cv.wait_for(l,std::chrono::microseconds(timeout));
if(ret==std::cv_status::no_timeout){
}else{
return SEMAPHORE_P_RESULT::P_TIMEOUT;
}
m_cnt--;
}
bool semaphoreV()
{
std::unique_lock<std::mutex> l(m_lock);
m_cnt++;
m_cv.notify_one();
}
private:
std::mutex m_lock;
std::condition_variable m_cv;
int m_cnt;
};