Ich bin auf ein Problem gestoßen, als ich einige Threads starten wollte, um für eine bestimmte Zeit einige Berechnungen durchzuführen. Aber die gesamte verstrichene Zeit ist immer größer als die Summe der für jeden Thread zugewiesenen Zeit, während ich erwartet hätte, dass sie eher dem Maximum entspricht. Wo liegt mein Missverständnis?
Einige Beispielscode:
#include
#include
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) { /* einige Berechnungen */ }
}
Ich würde erwarten, dass dies etwa 1 Sekunde dauert. Aber es dauert etwa 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