Ich versuche, dies mit der Unterstützung von C++ 11 Parallelität zu tun.Korrekte Möglichkeit, eine Bedingungsvariable zu warten, die von mehreren Threads benachrichtigt wird
Ich habe eine Art Thread-Pool von Worker-Threads, die alle dasselbe tun, wo ein Master-Thread ein Array von Zustandsvariablen hat (eine für jeden Thread, sie müssen synchronisiert starten, dh nicht voraus laufen Zyklus ihrer Schleife).
for (auto &worker_cond : cond_arr) {
worker_cond.notify_one();
}
dann muss dieser Thread auf eine Benachrichtigung von jedem Thread des Pools warten, um seinen Zyklus erneut zu starten. Was ist der richtige Weg, dies zu tun? Haben Sie eine einzige Bedingungsvariable und warten Sie auf eine Integer-Zahl, wobei jeder Thread, der nicht der Master ist, zunehmen wird? so etwas wie (noch im Master-Thread)
unique_lock<std::mutex> lock(workers_mtx);
workers_finished.wait(lock, [&workers] { return workers = cond_arr.size(); });
Eine schnelle Frage: Haben Sie ['std :: experimental :: barrier '] (http://en.cppreference.com/w/cpp/experimental/barrier) in Betracht gezogen? –