cpp11 はスレッド プール (5) を実装します - mutex とcondition_variable を使用してセマフォを実装します

実装

このプロジェクトのセマフォは、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