为什么 std::timed_mutex::try_lock_for 不起作用?

2024-02-29

我使用 gcc-4.8.1(configure: ./configure --prefix=/usr/local) 在 Ubuntu 12.04 中编译以下代码,但是当我运行它时,它不起作用。它没有停下来等待互斥体。它返回 false,并输出“Hello world!”

命令:g++ -std=c++11 main.cpp -omain -pthread

当我使用gcc-4.6(apt-get install g++)编译它时,它运行得很好。程序等待了大约十秒,输出“Hello world!”

#include <thread>
#include <iostream>
#include <chrono>
#include <mutex>

std::timed_mutex test_mutex;

void f()
{
    test_mutex.try_lock_for(std::chrono::seconds(10));
    std::cout << "hello world\n";
}

int main()
{
    std::lock_guard<std::timed_mutex> l(test_mutex);
    std::thread t(f);
    t.join();
      return 0;
}

如果我没记错的话,那就是Bug 54562 - 互斥锁和条件变量计时器 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54562.

还提到了该错误的原因:

这是因为它使用 CLOCK_MONOTONIC 时钟(如果在 platform) 计算需要返回的绝对时间, 这是不正确的,因为 POSIX pthread_mutex_timedlock() 调用使用 CLOCK_REALTIME 时钟,在我的平台上,单调时钟是 远远落后于实时时钟。

但是,这并不能解释为什么您会看到正确的行为gcc-4.6尽管。也许_GLIBCXX_USE_CLOCK_MONOTONIC没有启用?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 std::timed_mutex::try_lock_for 不起作用? 的相关文章

随机推荐