QWAITCONDITION可以假发醒来吗?
Can QWaitCondition spuriously wake up?
官方文档没有说QWaitCondition
是否可以像std::condition_variable
一样醒来。想象我有线程1:
//Thread no. 1
qmutex.lock();
someCondition = false;
qmutex.unlock();
qwaitcond.notify_all();
所以我的问题是,是否可以安全地假设其他线程中的代码:
//Thread no. 2
if(someCondition)
qwaitcond.wait(qmutex);
和此代码:
//Thread no. 2
while(someCondition)
qwaitcond.wait(qmutex);
是eqvalent吗?还是还有其他知识来源说他们可以不用notify
醒来,我应该更喜欢第二个样本?
注意:为了简单起见,我假设在线程1中达到线程2等待。
您可以在书本中找到"动手的高性能节目",并使用qt 5&quot quot第141页。本书的作者写道,有可能的唤醒是可能的。为了避免虚假唤醒,您应该仔细检查我们正在等待的状况确实满足了:
中的代码:QMutexLocker locker(&mutex);
while(!thereIsAFreeSlot())
{
condition.wait(&mutex);
}
链接:https://www.amazon.com/hands-high-performance-programming-cross-platform/dp/1789531241