2

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

いくつかのコード例:

#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
4

2 に答える 2

1

からの2.96s user出力timeは、使用した CPU 時間です。少なくとも 3 つのコアを持つプロセッサで 3 つのスレッドをそれぞれ 1 秒間実行する場合 [そして他のプロセスとの競合があまりない] 場合、3 秒間の CPU 時間の大部分を使用することになります。合計時間は 1.003 秒です。これは、1 秒のスレッドに加えて、開始/終了時のわずかなオーバーヘッドに妥当です。

于 2013-07-10T10:25:22.400 に答える
0

1.003秒かかります。あなたは、あなたの期待を満たす出力に注意を払いませんでした。

于 2013-07-10T10:24:57.830 に答える