一定時間、いくつかの計算を行うためにいくつかのスレッドを生成したいときに、問題が発生しました。しかし、経過時間の合計は、各スレッドに割り当てられた時間の合計よりも常に大きくなりますが、私はそれが最大値よりも大きいと予想していました。ここで何が理解できませんか?
いくつかのコード例:
#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