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) 的错误报告(并确认)
注意,这不是关于 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) 的错误报告(并确认)