/************************************/
/* 文件名:CSemaphore.h */
/* 功 能:C++11信号量 */
/************************************/
#ifndef _CSEMAPHORE_H_
#define _CSEMAPHORE_H_
#include <mutex>
#include <condition_variable>
class CSemaphore
{
public:
CSemaphore(long count = 0);
void Signal();
void Wait();
private:
std::mutex _mutex;
std::condition_variable _cv;
long m_count;
};
#endif /*_CSEMAPHORE_H_*/
/************************************/
/* 文件名:CSemaphore.cpp */
/* 功 能:C++11信号量 */
/************************************/
#include "CSemaphore.h"
CSemaphore::CSemaphore(long count)
:m_count(count)
{
}
void CSemaphore::Signal()
{
std::unique_lock<std::mutex> lock(_mutex);
++m_count;
_cv.notify_one();
}
void CSemaphore::Wait()
{
std::unique_lock<std::mutex> lock(_