Junior — Middle
Que métodos permitem evitar deadlocks ao usar mutexes dentro de uma mesma função?
sobes.tech IA
Resposta da IA
Para evitar deadlocks ao usar mutexes dentro de uma mesma função em Go, pode usar os seguintes métodos:
- Evitar reaplicar o mesmo mutex: se o mutex já estiver bloqueado, não tente reaplicá-lo na mesma thread.
- Usar
sync.RWMutexem vez desync.Mutex, se apenas operações de leitura forem necessárias, para reduzir bloqueios. - Organizar o código de modo que a aquisição de mutexes ocorra numa mesma ordem, se vários mutexes forem adquiridos.
- Usar
TryLock(através de bibliotecas externas ou implementação própria), para tentar adquirir o mutex sem bloquear, e tratar a situação em caso de falha.
Exemplo de uso seguro de mutex:
var mu sync.Mutex
func safeFunction() {
mu.Lock()
defer mu.Unlock()
// secção crítica
}
É importante não chamar mu.Lock() novamente na mesma goroutine sem Unlock(), pois isso pode causar deadlock.