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.RWMutexin plaats vansync.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.