Sobes.tech
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.