Sobes.tech
Назад к вопросам
Middle+
3

Что такое Mutex и что у него под капотом?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Mutex (взаимное исключение) — это примитив синхронизации, который обеспечивает эксклюзивный доступ к разделяемому ресурсу в многопоточной среде. Он гарантирует, что в один момент времени только один поток (горутинa в Go) может владеть мьютексом и выполнять критическую секцию кода.

Под капотом в Go sync.Mutex реализован с использованием атомарных операций и системных вызовов:

  • Внутри есть поле состояния (обычно целочисленное), которое хранит информацию о том, заблокирован ли мьютекс.
  • При попытке захвата мьютекса используется атомарная операция Compare-And-Swap для установки состояния "заблокирован".
  • Если мьютекс уже захвачен, горутина блокируется и помещается в очередь ожидания.
  • Когда мьютекс освобождается, одна из ожидающих горутин пробуждается.

Таким образом, мьютекс реализует эффективный механизм блокировки с минимальным использованием системных вызовов, переходя в режим ожидания только при конфликте.

Пример использования:

var mu sync.Mutex

mu.Lock()
// критическая секция
mu.Unlock()