具有sleep_for和sleep_until功能的 gcc 可能存在的问题



gcc似乎在sleep_for和sleep_until函数(命名空间 std::this_thread(方面存在问题。我用未来变量和条件变量做了一些简单的例子。gcc实际上使用系统时钟而不是单调时钟,这可能会导致随着时间的推移而跳跃。在我的示例中,在某些情况下,时钟会跳跃,我的超时会立即到期。

错误应该是这个 GCC 错误 41861

我看到在未来的 gcc 10 版本中,该错误可能会得到解决,但在新版本的 gcc 实现之前,这个问题有解决方案吗?有人注意到了吗?

更新: 此错误在最后一个编译器版本(GCC 10.2(中是否已解决?

这确实是一个惊人的错误,在 GCC 10 中修复(错误 41861 在<condition_variable>的上下文中描述了它(。

回到我遇到这种情况的那一天,很容易依靠 Boost 来获得正确的行为,但即使是这样,直到 1.61 才被打破。如今,无论如何,混合 Boost 和标准时序/线程代码会很奇怪,因为标准设施通常是成熟且首选的(具有讽刺意味的是检测到!

我当时所做的是创建直接包装 POSIX 功能的condition_variable的替代品。

无论你在做什么sleep_for/sleep_until,我怀疑你几乎没有办法,只能做同样的事情,对不起。

最新更新