gpt4 book ai didi

c++ - 为什么 std::future::wait_for 不等待正确的持续时间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:56:32 29 4
gpt4 key购买 nike

我不明白为什么调用 std::future::wait_for 时测量的持续时间和指定的持续时间之间的差异会随着指定持续时间的增加而增加。

当我告诉 std::future 等待 10ns 并测量耗时时,我得到 ~2000ns。现在,10 纳秒是一个非常短的持续时间,所以可能相关函数调用涉及太多开销以等待这么短的时间。但是当我告诉 std::future 等待 100000ns 并测量耗时时,我得到 ~150000ns。分别等待 10 微秒和 100 微秒时,可以看到类似的效果。

#include <chrono>
#include <future>
#include <iostream>
#include <thread>

using namespace std::chrono;
using namespace std::chrono_literals;

void f() { std::this_thread::sleep_for(1s); }

int main() {
steady_clock::time_point start, end;

std::future<void> future = std::async(std::launch::async, f);

start = steady_clock::now();
future.wait_for(10ns);
end = steady_clock::now();
std::cout << "10 -> " << (end - start).count() << '\n';

start = steady_clock::now();
future.wait_for(100000ns);
end = steady_clock::now();
std::cout << "100000 -> " << (end - start).count() << '\n';

return 0;
}

我用 g++ future_test.cpp -lpthread 编译上面的代码,在 Ubuntu 18.04 上用 g++ 7.3.0。

我可以解释一下

10 -> 2000
100000 -> 102000

但这不是我得到的。这是多次执行的代表性结果:

10 -> 2193
100000 -> 154723

为什么 100'000ns 的测量持续时间比指定持续时间多 ~2'000ns?

最佳答案

引用documentation :

std::future_status wait_for( const std::chrono::duration& timeout_duration );

This function may block for longer than timeout_duration due to scheduling or resource contention delays.

关于c++ - 为什么 std::future::wait_for 不等待正确的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55748416/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com