Урок 11: Переменные условия — координация потоков
Mutex предотвращает гонки данных, но не позволяет потоку ждать, пока условие не станет истинным. Переменные условия (condition variables) позволяют потоку эффективно спать, пока другой поток не просигнализирует, что что-то изменилось.
Переменная условия — это как звонок в магазине: вы ждёте у двери, и когда кто-то кладёт товар на полку, он звонит — тогда вы входите.
- переменная условия (condition variable)
- Примитив синхронизации, который позволяет потоку атомарно ожидать условия, освобождая mutex, и просыпаться, когда другой поток сигнализирует.
- производитель-потребитель (producer-consumer)
- Паттерн программирования, при котором один поток (производитель) генерирует данные и помещает их в буфер, а другой поток (потребитель) забирает и обрабатывает их.
- ложное пробуждение (spurious wakeup)
- Ситуация, когда pthread_cond_wait возвращается, хотя ни один поток не вызвал signal. Требует проверки предиката в цикле.
- broadcast
- pthread_cond_broadcast будит все потоки, ожидающие на переменной условия, в отличие от signal, который будит только один.
- предикат (predicate)
- Условие, проверяемое до и после pthread_cond_wait, чтобы защититься от ложных пробуждений и проблем TOCTOU.