std ::未来超时太早,另类?

时间:2014-01-19 07:14:45

标签: c++11 g++ arm future

我有以下C ++ 11代码:

auto f = std::async(std::launch::async, [] () { myfunction(); });
std::future_status status;
do {
    status = f.wait_for(std::chrono::seconds(1));
    if (status == std::future_status::timeout) {
        fprintf(stderr, "Hello!\n");
    }
} while (status != std::future_status::ready);

在我的笔记本电脑上运行正常(gcc版本4.7.3(Ubuntu / Linaro 4.7.3-1ubuntu1)),即每隔myfunction()次运行我得到一个“你好!”输出

然而,在我的ARM板上使用gcc版本4.7.3 20130328(预发行版)(crosstool-NG linaro-1.13.1-4.7-2013.04-20130415-Linaro GCC 2013.04)我立刻得到了输出,没有明显的延迟(即它甚至不会等到第一秒),也只是继续打印“你好!”直到myfunction()完成。

根据http://en.cppreference.com/w/cpp/thread/future/wait_for,当且仅当超时已到期时,我才应该获得超时状态。

我怀疑这可能是由于GCC中的“定时等待函数不返回future_status :: deferred”(参考问题C++ 11 future_status::deferred not working)。但是myfunction()会运行,所以最终它不应该一直返回“超时”,不应该吗?

有没有人对ARM平台上的future :: wait_for有任何经验,或者是否有人可以对这个问题有所了解?

1 个答案:

答案 0 :(得分:0)

我更新了主板上的图像(从Ubuntu Raring到Ubuntu Saucy),代码现在运行正常。正如@ user3125280指出的那样,这实际上是一个stdlibc ++问题。