Sobes.tech
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.RWMutex em vez de sync.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.