Назад к вопросам
Junior — Middle
78
Можно ли применять несколько механизмов блокировки (Mutex) внутри одной функции одновременно?
Компании, где спрашивали
GsmSoft
Ответ от нейросети
sobes.tech AI
Да, в Go можно использовать несколько мьютексов (Mutex) внутри одной функции одновременно. Это часто встречается, когда нужно защитить разные ресурсы или части данных, которые не связаны между собой. Главное — избегать взаимных блокировок (deadlock), когда один мьютекс ожидает освобождения другого, а тот, в свою очередь, ждёт первого.
Пример использования нескольких мьютексов:
var mu1 sync.Mutex
var mu2 sync.Mutex
func updateResources() {
mu1.Lock()
defer mu1.Unlock()
// Работа с первым ресурсом
mu2.Lock()
defer mu2.Unlock()
// Работа со вторым ресурсом
}
Чтобы избежать deadlock, рекомендуется всегда блокировать мьютексы в одном и том же порядке во всех местах кода.