Junior — Middle
Може ли да се прилагат няколко механизма за блокиране (Mutex) в една функция едновременно?
sobes.tech AI
Отговор от AI
Да, в езика Go е възможно да се използват няколко mutex (Mutex) в една и съща функция едновременно. Това е често срещано, когато трябва да се защитят различни ресурси или части от данни, които не са свързани помежду си. Основното е да се избягват взаимните блокировки (deadlock), когато един mutex очаква освобождаването на друг, а той от своя страна очаква първия.
Пример за използване на няколко mutex:
var mu1 sync.Mutex
var mu2 sync.Mutex
func updateResources() {
mu1.Lock()
defer mu1.Unlock()
// Работа с първия ресурс
mu2.Lock()
defer mu2.Unlock()
// Работа с втория ресурс
}
За да се избегнат deadlock-овете, се препоръчва винаги да се заключват mutex-ите в един и същи ред във всички части на кода.