Назад к вопросам
Купер
Junior — Middle
77
Могли бы вы объяснить принцип работы взаимного исключения (Mutex) и его использование в многопоточных программах?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Взаимное исключение (Mutex) — это механизм синхронизации, который используется для предотвращения одновременного доступа нескольких потоков к общему ресурсу (например, переменной или файлу). Mutex гарантирует, что в каждый момент времени только один поток может владеть блокировкой и выполнять критическую секцию кода.
Принцип работы:
- Поток пытается захватить mutex перед входом в критическую секцию.
- Если mutex свободен, поток получает доступ и продолжает работу.
- Если mutex занят другим потоком, текущий поток блокируется и ждёт освобождения.
- После завершения работы с ресурсом поток освобождает mutex, позволяя другим потокам продолжить.
В Go это реализуется через тип sync.Mutex:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock() // захват mutex
counter++ // критическая секция
mu.Unlock() // освобождение mutex
}
Использование mutex предотвращает состояния гонки и обеспечивает корректность данных при параллельном выполнении.