cpp11实现线程池(五)——使用mutex和condition_variable实现Semaphore

实现方法

本项目信号量采用mutex + condition_variable以及一个记录数值的变量来实现,注意信号量semaphore线程通信机制不是线程互斥

源代码

class Semaphore
{
    
    
public:
	Semaphore(int limit = 0)
		:resLimit_(limit)
	{
    
    }
	// 获取一个信号量资源
	void wait()
	{
    
    
		std::unique_lock<std::mutex> lock(mtx_);
		cond_.wait(lock, [&]()->bool {
    
     return resLimit_ > 0; });
		resLimit_--;

	}
	// 增加一个信号量资源
	void post()
	{
    
    
		std::unique_lock<std::mutex> lock(mtx_);
		resLimit_++;
		cond_.notify_all();
	}
private:

	int resLimit_;
	std::mutex mtx_;
	std::condition_variable cond_;
};

猜你喜欢

转载自blog.csdn.net/qq_42120843/article/details/130790336
今日推荐