在 gcc 的 std::condition_variable::cv.wait_for()
中似乎有一个错误。
如果在等待的过程中系统时间发生变化,会在错误的时间段后返回。
大多数情况下 - 如果时间移到过去,它就不会返回,或者如果时间移到 future ,它会立即醒来。
我认为原因是它使用系统时钟而不是 steady_clock ( https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/std/condition_variable#L67 )。
有人遇到过这个问题吗?什么是解决方法?
最佳答案
看起来标准同意你使用的时钟应该是std::chrono::steady_clock
。
§ 30.5.1
- Effects: as if
return wait_until(lock, chrono::steady_clock::now() + rel_time, std::move(pred));
这个错误似乎也是 tracked海湾合作委员会的人已经。
至于修复/解决方法,您可以:
- 提交对
libstdc++
的修复 - Use libc++ ,这appears to get it right .
关于c++ - 条件变量中的 gcc 错误::wait_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51483659/