c++ - std::condition_variable::wait_until 相对于 std::this_thread::sleep_for 有什么优势吗?

标签 c++ multithreading c++11

在时间等待场景中:

our software works in the background, and synchronizes data with the server in every 20 - 30 minutes.

我想用

std::this_thread::sleep_for

但我的上级强烈反对任何形式的 sleep 功能。他推荐

std::condition_variable::wait_until(lock, timeout-time, pred)

不知道在这种情况下sleep_for有什么缺点吗?

最佳答案

正如评论中已经指出的那样,这仅取决于您的用例。两者之间的主要区别在于,condition_variable 如果您触发它,可以更早醒来。您还可以添加一个必须满足才能真正醒来的谓词,但这只是生活质量的补充。顺便说一句,与 sleep_for 等效的是 wait_for 而不是 wait_untilcondition_variable 也非常适合在多个线程之间进行通信或同步。

考虑到您所说的一切,我会使用 condition_variable,原因如下:

  1. 让线程长时间休眠不是一个好主意,因为您的应用程序可以随时退出(或者更确切地说,可以被请求退出)。在那种情况下,您可能希望您的线程正常退出,因此您必须能够随时唤醒它。
  2. 您想即时更改配置。如果您的线程必须使用新参数重新启动,或者如果您需要该线程实际加载配置文件,您也不想等待下一个 20 分钟间隔结束。

关于c++ - std::condition_variable::wait_until 相对于 std::this_thread::sleep_for 有什么优势吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56848887/

相关文章:

c++ - 无法使用 UNICODE 读取文件(存在)

c++ - 链接静态类成员函数会引发 undefined reference 错误C++

multithreading - 为什么这段代码没有达到竞争条件?

c++ - 访问 Protocol Buffer 扩展字段

c++ - 使用 Eigen 插值旋转(slerp)

java - ImapIdleChannelAdapter 任务调度程序线程配置

c++ - 高效的 C++ 条件自旋锁是否可能?

c++ - 将递归可变参数模板函数转换为迭代

c++ - 为什么在 C++11 中使用非成员开始和结束函数?

c++ - 在 Yosemite mac 上将 boost 库与 Xcode 6.1.1 链接的问题