Урок 10: Mutex — защита разделяемых данных
Когда несколько потоков обращаются к разделяемым данным без синхронизации, возникает состояние гонки — ошибка, которую трудно воспроизвести и которая может привести к неверным данным. Mutex (Mutual Exclusion, взаимное исключение) — это базовый механизм, решающий эту проблему.
Mutex — это как ключ от туалета: войти может только тот, кто держит ключ. Все остальные ждут снаружи.
- mutex (взаимное исключение)
- Mutual Exclusion — механизм синхронизации, позволяющий только одному потоку удерживать блокировку в каждый момент времени, защищая критическую секцию.
- гонка данных (race condition)
- Состояние, при котором результат зависит от непредсказуемого порядка, в котором потоки выполняют операции. Приводит к ошибкам, которые трудно воспроизвести.
- критическая секция (critical section)
- Участок кода, где происходит доступ к разделяемым данным; должен быть защищён mutex для предотвращения гонок данных.
- lock_guard
- Обёртка RAII в C++, которая захватывает блокировку в конструкторе и освобождает в деструкторе, гарантируя, что блокировка всегда освобождается, даже при исключениях.
- взаимоблокировка (deadlock)
- Состояние, при котором два или более потоков ждут друг от друга освобождения mutex, и ни один не может продолжить.