Sobes.tech
Junior — Middle

Hoe kan je controleren of de gegevensblokkering is uitgevoerd bij het gebruik van map met een mutex?

sobes.tech AI

Antwoord van AI

In Go, als je een mutex gebruikt om toegang tot een map te beschermen, kun je niet rechtstreeks controleren of de lock is uitgevoerd, omdat de standaard sync.Mutex geen methoden biedt om de status te controleren.

Echter, je kunt:

  • sync.RWMutex gebruiken en de code zorgvuldig ontwerpen zodat de locks duidelijk zijn.
  • In tests of debugging logs toevoegen vóór en na het aanroepen van Lock() en Unlock().
  • Voor meer geavanceerde controle, sync.Mutex uit de sync-package gebruiken met wrappers die de lockstatus registreren (bijvoorbeeld een booleaanse vlag), maar dat vereist voorzichtigheid.

Voorbeeld met logging:

var mu sync.Mutex
var m = make(map[string]int)

func write(key string, value int) {
    fmt.Println("Mutex wordt vergrendeld")
    mu.Lock()
    defer mu.Unlock()
    fmt.Println("Mutex vergrendeld")
    m[key] = value
    fmt.Println("Mutex wordt ontgrendeld")
}

Op deze manier kan men indirect bevestigen dat de lock plaatsvindt, maar er zijn geen ingebouwde middelen om de status van de mutex te controleren.