Junior — Middle
Wie kann man überprüfen, ob beim Verwenden von map mit einem Mutex eine Datenblockierung durchgeführt wurde?
sobes.tech KI
Antwort von AI
In Go, wenn du ein Mutex verwendest, um den Zugriff auf eine Map zu schützen, kannst du nicht direkt überprüfen, ob die Sperre erfolgt ist, da das standardmäßige sync.Mutex keine Methoden zur Statusüberprüfung bereitstellt.
Du kannst jedoch:
sync.RWMutexverwenden und den Code sorgfältig gestalten, damit Sperren offensichtlich sind.- In Tests oder beim Debuggen Protokolle vor und nach Aufrufen von
Lock()undUnlock()hinzufügen. - Für eine fortgeschrittene Kontrolle
sync.Mutexaus demsync-Paket mit Wrappers verwenden, die den Sperrstatus aufzeichnen (z.B. eine boolesche Flagge), aber das erfordert Vorsicht.
Beispiel mit Logging:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
fmt.Println("Mutex wird gesperrt")
mu.Lock()
defer mu.Unlock()
fmt.Println("Mutex gesperrt")
m[key] = value
fmt.Println("Mutex wird freigegeben")
}
Auf diese Weise kann man indirekt sicherstellen, dass die Sperre erfolgt, aber es gibt keine eingebauten Mittel, um den Zustand des Mutex zu überprüfen.