Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 时钟是否在线程上阻塞?_C++_Multithreading_C++11 - Fatal编程技术网

C++ 时钟是否在线程上阻塞?

C++ 时钟是否在线程上阻塞?,c++,multithreading,c++11,C++,Multithreading,C++11,我遇到了一个问题,当时我想生成几个线程来在一定时间内进行一些计算。但是总的运行时间总是大于分配给每个线程的时间之和,而我希望它会超过最大值。我在这里不明白什么 一些示例代码: #include <thread> #include <chrono> void do_some_wait(int time); int main() { using std::thread; thread t1(&do_some_wait, 1); thread t2(&a

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

一些示例代码:

#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.003秒。您没有注意到满足您期望的输出。

时间输出中的
2.96s用户
是您使用的CPU时间。如果在一个至少有三个内核的处理器上运行三个线程,每个线程运行一秒钟(而且与其他进程没有太多竞争),那么将使用3秒钟的CPU时间的最好部分。总时间为1.003s,这对于1s乘以线程加上开始/结束时的少量开销来说是合理的

输出显示需要1.003秒,所以1.003对您来说不是“~1秒”?我想这只是你必须支付的开销。“我在这里不明白什么?”时间的输出。
$ 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