Пробуждение notify_all в C++
Метод notify_all будит все потоки,
ожидающие на одной std::condition_variable.
Два worker дождутся общего флага и напечатают
слово после notify_all:
#include <condition_variable>
#include <iostream>
#include <mutex>
#include <thread>
int main() {
std::mutex mx;
std::condition_variable cv;
bool open = false;
auto wait_job = [&]() {
std::unique_lock<std::mutex> lock(mx);
cv.wait(lock, [&]() { return open; });
std::cout << "all\n";
};
std::thread first(wait_job);
std::thread second(wait_job);
{
std::lock_guard<std::mutex> lock(mx);
open = true;
}
cv.notify_all();
first.join();
second.join();
return 0;
}
Два std::thread ждут одну condition_variable. Поднимите флаг и вызовите notify_all.