gpt4 book ai didi

c++ - 线程 sleep VS 等待条件

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:55 25 4
gpt4 key购买 nike

编辑:

这里的重点是了解实现等待循环的更有效解决方案,该等待循环在每次迭代时轮询条件。高效是指“CPU 调度高效”。

我知道我的代码中使用的等待条件不是“真正的等待条件”,使用了“wakeOne”/“wakeAll”指令,但我想知道使用假等待条件是否比 CPU 更有效睡一觉。

原帖:

这里有 2 个代码片段,它们做同样的事情:WAITING某事发生。此代码用于工作线程池。因此,当一个线程等待时,其他线程(或其他一些线程)应该处理它们的指令。

第一个使用“ sleep ”,第二个使用“等待条件”。它们是用 Qt 编写的,但可以很容易地转换为 C++11、Boost 或任何线程库。

两者都很好,但有什么性能差异吗?我记得我在某处读过:

The "sleep" cause an active wait, so the CPU spend time to wait.

The "wait condition" make the CPU wait for an event, so the CPU switch to another thread execution during the wait

我记得清楚吗?真的吗 ?使用等待条件更有效地并行执行多个线程?

“ sleep ”版本:

while (someCondition == false)
{
sleep(100);
}

// Do some work

“等待条件”版本:

QMutex mutex(QMutex::NonRecursive);
QWaitCondition waitCondition;

while (someCondition == false)
{
QMutexLocker locker(&mutex);
waitCondition.wait(&mutex, 100);
}

// Do some work

最佳答案

已编辑:

两个版本是相同的,因为调用线程都是“阻塞”或“暂停”(即 - 从调度程序的“可运行”列表中删除它)。

http://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html http://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_cond_timedwait.html

在 sleep 和等待 CV 期间,线程不使用 CPU 的任何时钟周期。

原创:

差别很大。第一个示例( sleep )将在 0-100 毫秒内对事件使用react。另一个 - 带有条件变量 - 将“立即”使用react。那是因为 sleep 会做到这一点 - 在您请求的确切时间量内 sleep (注意 - 假设您的系统不使用 POSIX 风格的信号)。另一方面,只要您请求,条件变量就会一直等待,除非它收到条件可能已更改的通知。

关于c++ - 线程 sleep VS 等待条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com