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

时间:2019-07-02 09:02:02

标签: c++ multithreading c++11

在等待时间的情况下:

  

我们的软件在后台运行,并与   每20到30分钟一台服务器。

我想使用

std::this_thread::sleep_for

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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