Sobes.tech
Назад к вопросам
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, рекомендуется всегда блокировать мьютексы в одном и том же порядке во всех местах кода.