QWAITCONDITION可以假发醒来吗?

Can QWaitCondition spuriously wake up?

本文关键字:醒来 假发 QWAITCONDITION      更新时间:2023-10-16

官方文档没有说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