0
点赞
收藏
分享

微信扫一扫

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


1. 信号量的定义

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


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

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

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

#ifndef _SEMAPHORE_H
#define _SEMAPHORE_H
#include <mutex>
#include <condition_variable>
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


举报

相关推荐

0 条评论