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.RWMutexgebruiken en de code zorgvuldig ontwerpen zodat de locks duidelijk zijn.- In tests of debugging logs toevoegen vóór en na het aanroepen van
Lock()enUnlock(). - Voor meer geavanceerde controle,
sync.Mutexuit desync-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.