我正在使用C++11和STL线程编写一个线程安全队列。目前WaitAndPop方法的代码如下。我希望能够传递一个参数给WaitAndPop,以指示调用线程是否已被要求停止。如果WaitAndPop等待并返回了队列中的元素,则应返回true;如果调用线程正在被停止,则应返回false。
bool WaitAndPop(T& value, std::condition_variable callingThreadStopRequested)
{
std::unique_lock<std::mutex> lock(mutex);
while( queuedTasks.empty() )
{
queuedTasksCondition.wait(lock);
}
value = queue.front();
queue.pop_front();
return true;
}
能否编写类似于这样的代码?我习惯使用Win32中的WaitForMultipleObjects,但找不到适用于此情况的替代方法。
谢谢。
我看到了相关问题,但它并没有真正回答我的问题。在Linux上学习线程
poll()
和使用管道来处理POSIX的WaitForMultipleEvents
。然而,我不认为这对你的条件变量有帮助... - trojanfoeWaitForMultipleObjects
的等效物。 - didierc