如果这个问题已经提出,我深表歉意。
是否可以清除已经设置的条件变量?
我想实现的细节如下:
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,因为这只不过是轮询标志。不是吗
最佳答案
是。每当调用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()
),线程将处理数据,然后再次等待。关于c++ - 重置条件变量(提升),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37536250/