Junior — Middle
Jak lze ověřit, zda došlo k blokování dat při použití map s mutexem?
sobes.tech AI
Odpověď od AI
V jazyce Go, pokud používáte mutex k ochraně přístupu k mapě, nelze přímo ověřit, zda byla provedena zámka, protože standardní sync.Mutex neposkytuje metody pro kontrolu jeho stavu.
Nicméně, můžete:
- Použít
sync.RWMutexa pečlivě navrhnout kód tak, aby byly zámky zřejmé. - V testech nebo při ladění přidat logování před a po volání
Lock()aUnlock(). - Pro pokročilejší kontrolu použít
sync.Mutexz balíčkusyncs obaly, které zaznamenávají stav zámku (například boolean vlajku), ale to vyžaduje opatrnost.
Příklad s logováním:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
fmt.Println("Zamykání mutexu")
mu.Lock()
defer mu.Unlock()
fmt.Println("Mutex zamčen")
m[key] = value
fmt.Println("Odemykání mutexu")
}
Tímto způsobem lze nepřímo ověřit, že k zámku došlo, ale neexistují vestavěné prostředky pro kontrolu stavu mutexu.