Sobes.tech
Junior — Middle

Welke methoden voorkomen deadlocks bij het gebruik van mutexen binnen één functie?

sobes.tech AI

Antwoord van AI

Om deadlock te voorkomen bij het gebruik van mutexen binnen dezelfde functie in Go, kunnen de volgende methoden worden gebruikt:

  • Vermijd het herhaaldelijk verkrijgen van dezelfde mutex: als de mutex al is vergrendeld, probeer deze dan niet opnieuw te verkrijgen in dezelfde thread.
  • Gebruik sync.RWMutex in plaats van sync.Mutex, als alleen leesbewerkingen mogelijk zijn, om blokkades te verminderen.
  • Organiseer de code zodanig dat het verkrijgen van mutexen in dezelfde volgorde gebeurt, als meerdere mutexen worden verkregen.
  • Gebruik TryLock (via externe bibliotheken of eigen implementatie), om te proberen de mutex zonder blokkering te verkrijgen, en handel de situatie af bij falen.

Voorbeeld van veilig gebruik van een mutex:

var mu sync.Mutex

func safeFunction() {
    mu.Lock()
    defer mu.Unlock()
    // kritieke sectie
}

Het is belangrijk om mu.Lock() niet opnieuw aan te roepen in dezelfde goroutine zonder Unlock(), anders kan een deadlock ontstaan.