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

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

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

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

编译器是 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: Blocks the calling thread for the relative timeout (30.2.4) specified by rel_time.

8 Synchronization: None.

9 Throws: Timeout-related exceptions (30.2.4).

这意味着您观察到的行为是不合规的。

能够在 GCC 4.8.5 上重现。

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