Sobes.tech
Назад к вопросам
Junior — Middle
76

Могли бы вы объяснить принцип работы взаимного исключения (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 предотвращает состояния гонки и обеспечивает корректность данных при параллельном выполнении.