РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
794 of 815 menu

Метод notify_one

Метод notify_one класса condition_variable пробуждает один из потоков, которые в данный момент ожидают на этом условном переменном. Если ожидающих потоков несколько, то конкретный поток выбирается реализацией и не гарантируется. Если ожидающих потоков нет, то метод не делает ничего. Метод не принимает параметров и не возвращает значения.

Синтаксис

cv.notify_one()

Пример

Давайте рассмотрим пример, в котором один поток ожидает на условном переменном, а другой поток пробуждает его с помощью метода notify_one:

#include <iostream> #include <thread> #include <mutex> #include <condition_variable> using namespace std; mutex mtx; condition_variable cv; bool ready = false; void worker() { unique_lock<mutex> lock(mtx); cv.wait(lock, []{ return ready; }); cout << "Worker awakened" << endl; } int main() { thread t(worker); { lock_guard<mutex> lock(mtx); ready = true; } cv.notify_one(); t.join(); return 0; }

Результат выполнения кода:

"Worker awakened"

Пример

Давайте рассмотрим пример, в котором метод notify_one вызывается, когда ни один поток не ожидает на условном переменном. В этом случае метод не делает ничего, и последующий вызов wait будет ожидать до следующего уведомления:

#include <iostream> #include <thread> #include <mutex> #include <condition_variable> using namespace std; mutex mtx; condition_variable cv; bool ready = false; void worker() { unique_lock<mutex> lock(mtx); cv.wait(lock, []{ return ready; }); cout << "Worker awakened" << endl; } int main() { thread t(worker); cv.notify_one(); { lock_guard<mutex> lock(mtx); ready = true; } cv.notify_one(); t.join(); return 0; }

Результат выполнения кода:

"Worker awakened"

Смотрите также

  • класс condition_variable,
    который представляет условное переменное
  • метод wait,
    который ожидает на условном переменном
  • метод wait_for,
    который ожидает на условном переменном с таймаутом
  • метод notify_all,
    который пробуждает все ожидающие потоки
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить