std :: condition_variable :: wait_until与std :: this_thread :: sleep_for相比有什么优势吗?

Zha*_*ang 6 c++ multithreading c++11

在等待时间的情况下:

我们的软件在后台运行,并且每20-30分钟与服务器同步数据一次。

我想用

std::this_thread::sleep_for
Run Code Online (Sandbox Code Playgroud)

但是我的上司强烈反对任何形式的睡眠功能。他建议

std::condition_variable::wait_until(lock, timeout-time, pred)
Run Code Online (Sandbox Code Playgroud)

我想知道在这种情况下sleep_for是否有任何不利之处?

Tim*_*imo 1

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

鉴于您所说的一切,我会condition_variable出于以下原因使用:

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