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