gpt4 book ai didi

c++ - chrono::steady_clock 是否在线程上阻塞?

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

当我想生成几个线程以在设定的时间内进行一些计算时,我遇到了一个问题。但是经过的总时间总是大于每个线程分配时间的总和,而我预计它会超过最大值。我在这里不明白什么?

一些示例代码:

#include <thread>
#include <chrono>

void do_some_wait(int time);

int main() {
using std::thread;
thread t1(&do_some_wait, 1);
thread t2(&do_some_wait, 1);
thread t3(&do_some_wait, 1);

t1.join(); t2.join(); t3.join();
}

void do_some_wait(int time) {
using std::chrono::steady_clock;
using std::chrono::seconds;
auto end = steady_clock::now() + seconds(time);

while (steady_clock::now() < end) { /* some calculations */ }
}

我预计这需要大约 1 秒的时间来执行。但它需要 ~3。

$ clang++ -std=c++11 -stdlib=libc++ -Wall -pedantic thread.cpp -o thread && time ./thread
./thread 2.96s user 0.00s system 295% cpu 1.003 total

最佳答案

time 输出中的2.96s user 是你使用了多少 CPU 时间。如果您在至少具有三个内核的处理器上运行三个线程,每个线程一秒钟 [并且没有来自其他进程的太多竞争],您将使用 3 秒 CPU 时间的最佳部分。总时间为 1.003 秒,对于 1 秒的线程加上开始/结束时的一点开销来说,这是合理的。

关于c++ - chrono::steady_clock 是否在线程上阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567842/

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