我有一些代码,是这样的:暂停对空队列线程,而无需使用自旋锁
std::queue<int> a_queue;
bool exit = false;
void MainThreadFunc(int somedata)
{
a_queue.push(somedata);
}
void WorkerThreadFunc()
{
while (true)
{
if (exit)
return;
while (a_queue.empty());
DoSomethingWithData(a_queue.front());
a_queue.pop();
}
}
的问题是,我得到非常高的CPU使用率,这似乎是自旋锁的结果时,有什么为工作人员做。我试图使用一个互斥锁,但是它会要求主线程在队列中没有任何东西时锁定它(当然不会发生这种情况)。有什么替代方法来防止这种情况?
既然你不想使用同步对象,使用睡眠 '而(a_queue.empty())的std :: this_thread :: sleep_for(STD ::时辰::毫秒(1) );'你确定条件变量不适合你吗? – AlexStepanov
你可以在处理同步的队列周围放置一个包装器吗? –
@AlexStepanov这是一个游戏项目,其帧之间的“截止时间”约为16ms,因此等待1ms不是一种选择。 – user112513312