차단 대기열을 구현하려고합니다. 주요 부분은부스트 스레드 비활성화
template <typename T>
class Blocking_queue
{
public:
std::queue<T> _queue;
boost::mutex _mutex;
boost::condition_variable _cvar;
void Put(T& object);
T Get();
void Disable()
};
template<typename T>
void Blocking_queue::Put(T& object)
{
boost::mutex::scoped_lock lock(_mutex);
_queue.push(T);
lock.unlock();
_cvar.notify_one();
}
template<typename T>
T Blocking_queue::Get()
{
boost::mutex::scoped_lock lock(_mutex);
while(_queue.empty())
{
_cvar.wait(_mutex);
}
T last_el = _queue.front();
_queue.pop();
return last_el;
}
template<typename T>
void Blocking_queue::Disable()
{
}
(이 교육 작업의 일종) 다음과 같습니다 그리고 난 (작업에서 작성된) 비활성화() 모든 대기 스레드를 "해제"기능을 구현해야합니다. 문제는이 용어의 "배포"가 무엇을 의미하는지, 그리고 어떤 방법을 적용해야하는지 완전히 이해하지 못한다는 것입니다. 그래서 내 생각은 - 다음과 같다 : 사용 안 함()가 호출 될 때 우리는
while(_queue.empty())
{
//here
_cvar.wait(_mutex);
}
하는 현재의 thread를 발표 할 예정이다, 바로 내가 오전 (루프 내부에)이 자리에 현재의 thread에 대한 몇 가지 방법을 호출해야? 감사.
조건 변수에 대해 읽으십시오. –
큐가 "비활성화"되어 있고 비어 있다면'Get '해야합니까? –
큐가 사용 불가능한 경우 null을 리턴해야합니다. –