std::this_thread::sleep_for()可以有虚假的唤醒吗?

Can std::this_thread::sleep_for() have spurious wakeups?

本文关键字:唤醒 thread this sleep for std      更新时间:2023-10-16

注意,这不是关于std::condition_variable::wait_for()的问题。我知道那是虚假的。

我的程序的行为表明这个问题的答案是肯定的,但是STL文档对condition_variable的情况非常清楚。至少在cppreference.com中,this_thread的正确答案似乎是No.

编译器是gcc 4.8.1,如果这是一个缺陷

c++标准的相关章节(段落[thread.thread.this]/7-9)没有提到std::this_thread::sleep_for的虚假唤醒,不像std::condition_variable::wait_for

template <class Rep, class Period>
void sleep_for(const chrono::duration<Rep, Period>& rel_time);

7 Effects:阻塞rel_time指定的相对超时时间(30.2.4)。

8 Synchronization: None.

9 抛出:超时相关异常(30.2.4)。

这意味着你正在观察的行为是不符合标准的。

可以在GCC 4.8.5上复制。

还有一个针对GCC 5.1.0 (gcc.gnu.org/bugzilla/show_bug.cgi?id=66803)的bug报告(并确认)