notify_all будит все потоки, ожидающие на одной std::condition_variable. Два worker дождутся общего флага и напечатают слово после notify_all.">
Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpThNa 558 of 696 menu
◀ ▶

Пробуждение 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.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить