如果已经提出这个问题,我道歉
是否可以清除已设置的条件变量?
我想在下面实现的细节:
void worker_thread {
while (wait_for_conditional_variable_execute) {
// process data here
// Inform main thread that the data got processed
// Clear the conditional variable 'execute'
}
}
注意工作线程应该只处理一次数据,它应该等待主线程再次设置“执行”条件变量
我还考虑过如下标志
void worker_thread {
while (wait_for_conditional_variable_execute) {
if (flag) { flag = 0; }
// process data here. The `flag` will be set by main thread
}
}
但我认为这将是CPU密集型的,因为这只是对旗帜的轮询。不是吗?
答案 0 :(得分:1)
是。每次调用condition_variable
时都会重置wait()
。 wait()
阻止当前线程,直到condition_variable
被唤醒可以这么说。
但您似乎错误地使用了condition_variable
。而不是说
while (wait_for_conditional_variable_execute)
你真的想说
while (thread_should_run)
{
// wait_for_conditional_variable_execute
cv.wait();
}
这会给你带来以下效果:
void processDataThread()
{
while (processData)
{
// Wait to be given data to process
cv.wait();
// Finished waiting, so retrieve data to process
int n = getData();
// Process data:
total += n;
}
}
然后在你的主线程中你有:
addData(16);
cv.notify_all();
您的线程将处理数据,重新进入while
循环,然后等待condition_variable
被触发。一旦被触发(即调用notify()
),线程将处理数据,然后再次等待。