Назад к вопросам
СБЕР
Middle+
3
Что такое Mutex и что у него под капотом?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Mutex (взаимное исключение) — это примитив синхронизации, который обеспечивает эксклюзивный доступ к разделяемому ресурсу в многопоточной среде. Он гарантирует, что в один момент времени только один поток (горутинa в Go) может владеть мьютексом и выполнять критическую секцию кода.
Под капотом в Go sync.Mutex реализован с использованием атомарных операций и системных вызовов:
- Внутри есть поле состояния (обычно целочисленное), которое хранит информацию о том, заблокирован ли мьютекс.
- При попытке захвата мьютекса используется атомарная операция Compare-And-Swap для установки состояния "заблокирован".
- Если мьютекс уже захвачен, горутина блокируется и помещается в очередь ожидания.
- Когда мьютекс освобождается, одна из ожидающих горутин пробуждается.
Таким образом, мьютекс реализует эффективный механизм блокировки с минимальным использованием системных вызовов, переходя в режим ожидания только при конфликте.
Пример использования:
var mu sync.Mutex
mu.Lock()
// критическая секция
mu.Unlock()