블로킹 큐가 있습니다. (실제로 구현을 변경하기가 어려울 수 있습니다.) 실제로 블럭을 테스트하려고합니다. 특히 pop
메서드는 대기열이 비어 있고 push
이 수행되는 즉시 차단을 해제해야하는 경우 차단해야합니다. 테스트를 위해 다음과 같은 의사 C++ (11) 코드를 참조하십시오 : 분명히블로킹 큐의 실제 블럭을 테스트하는 방법
BlockingQueue queue; // empty queue
thread pushThread([]
{
sleep(large_delay);
queue.push();
});
queue.pop();
그것을 전체 스레드 pushThread
가 호출되어 실행되고 pop
전에 종료되는 일이 발생할 수 있기 때문에, 완벽하지, 지연이 큰 경우에도 , 지연이 클수록 테스트가 끝날 때까지 기다려야합니다.
push
이 호출되기 전에 pop
이 실행되고 그 결과가 push
이 반환 될 때까지 차단되는지 어떻게 적절하게 확인할 수 있습니까?
일반적으로 다른 스레드의 경우 차단 스레드는 스케줄러에서 절전 모드로 전환 한 스레드와 동일하게 보이므로 표준 C++에서는 사용할 수 없습니다. 실질적으로 말해서, 50ms 정도 기다리는 것만으로는 충분하지 않습니다. – MikeMB