Sobes.tech
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.RWMutex a 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() a Unlock().
  • Pro pokročilejší kontrolu použít sync.Mutex z balíčku sync s 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.