Junior — Middle
Hoe kunnen onderlinge blokkades in een multithread-omgeving worden voorkomen?
sobes.tech AI
Antwoord van AI
Om deadlocks in een multithread-omgeving te voorkomen, kunnen verschillende benaderingen worden gebruikt:
- Vermijd geneste blokkades: probeer niet meerdere mutexen tegelijk te vergrendelen.
- Bepaal een volgorde voor het verkrijgen van resources: vergrendel mutexen in dezelfde volgorde in alle threads.
- Gebruik timeouts bij het verkrijgen van blokkades: als de blokkade niet binnen een bepaalde tijd wordt verkregen, vrij dan de reeds verkregen resources en probeer het opnieuw.
- Pas hogere niveau synchronisatieconstructies toe: bijvoorbeeld, kanalen in Go, die expliciete blokkades vermijden.
Voorbeeld van geordende mutex-vergrendeling in Go:
var mu1, mu2 sync.Mutex
func safeFunc() {
mu1.Lock()
defer mu1.Unlock()
mu2.Lock()
defer mu2.Unlock()
// werken met resources
}
Het is belangrijk dat alle functies die deze mutexen verkrijgen, dit in dezelfde volgorde doen.