私はブロッキングキューを持っています(実装を変更するのは本当に難しいでしょう)。特に、pop
メソッドは、キューが空であり、push
が実行されるとすぐにブロックを解除する必要がある場合はブロックする必要があります。テストのために以下の擬似C++ 11のコードを参照してください:明らかブロッキングキューの実際のブロックをテストする方法
BlockingQueue queue; // empty queue
thread pushThread([]
{
sleep(large_delay);
queue.push();
});
queue.pop();
を、全体のスレッドpushThread
が呼び出され実行され、pop
前に終了していることが起こる可能性があるため、それは、完璧ではない、遅延が大きい場合であっても遅延が大きくなればなるほど、テストが終わるのを待たなければなりません。
push
が呼び出される前にpop
が実行され、ブロックされていることを正しく確認するには、push
が返されますか?
通常、他のスレッドにはスケジューラがスリープさせたスレッドと同じように見えるため、標準のC++では使用できません。実際に言えば、50ミリ秒程度待つだけで十分です。 – MikeMB