使用std::mutext与std::condition_variables实现信号量

1. 信号量的定义

使用std::mutext与std::condition_variables实现信号量_第1张图片
使用std::mutext与std::condition_variables实现信号量_第2张图片

2. 使用std::mutext与std::condition_variables实现信号量

代码来自:https://zhuanlan.zhihu.com/p/462668211

#ifndef _SEMAPHORE_H
#define _SEMAPHORE_H
#include 
#include 
using namespace std;
 
class Semaphore
{
public:
    Semaphore(long count = 0) : count(count) {}
    //V操作,唤醒
    void signal()
    {
        unique_lock<mutex> unique(mt);
        ++count;
		//原文这块有点问题,shanql
        //if (count <= 0) 
        //    cond.notify_one();
        cond.notify_one();
    }
    //P操作,阻塞
    void wait()
    {
        unique_lock<mutex> unique(mt);
        --count;
        //if (count < 0) //原文这块有点问题,shanql
        while( count < 0 )
            cond.wait(unique);
    }
    
private:
    mutex mt;
    condition_variable cond;
    long count;
};
#endif

你可能感兴趣的:(C/C++,操作系统,信号量)