Условная переменная — это примитив синхронизации, используемый для организации взаимодействия между потоками. Она позволяет потоку (или потокам) ждать наступления определенного условия, пока другой поток не уведомит его (их) о выполнении этого условия. Обычно используется совместно с мьютексом для обеспечения атомарности проверки условия и ожидания.
Основные операции:
Проблема ложных пробуждений (spurious wakeups): Поток может быть разбужен, даже если notify_one
или notify_all
не были вызваны. Поэтому ожидание на условной переменной всегда должно происходить в цикле, проверяющем условие.
Пример на C++ (
Условная переменная — это примитив синхронизации, используемый для организации взаимодействия между потоками. Она позволяет потоку (или потокам) ждать наступления определенного условия, пока другой поток не уведомит его (их) о выполнении этого условия. Обычно используется совместно с мьютексом для обеспечения атомарности проверки условия и ожидания.
Основные операции:
Проблема ложных пробуждений (spurious wakeups): Поток может быть разбужен, даже если notify_one
или notify_all
не были вызваны. Поэтому ожидание на условной переменной всегда должно происходить в цикле, проверяющем условие.
Пример на C++ (
Register or sign in to get access to full answers for all questions from the question bank.