Junior — Middle
Ako skontrolovať, či bola vykonaná blokácia údajov pri použití mapy s mutexom?
sobes.tech AI
Odpoveď od AI
V jazyku Go, ak používate mutex na ochranu prístupu k mape, nemôžete priamo skontrolovať, či bola vykonaná zámka, pretože štandardný sync.Mutex neposkytuje metódy na kontrolu jeho stavu.
Avšak, môžete:
- Použiť
sync.RWMutexa starostlivo navrhnúť kód tak, aby boli zámky zrejmé. - V testoch alebo pri ladení pridať logovanie pred a po volaní
Lock()aUnlock(). - Pre pokročilejšiu kontrolu použiť
sync.Mutexz balíkasyncs obalmi, ktoré zaznamenávajú stav zámky (napríklad, boolean vlajku), ale to vyžaduje opatrnosť.
Príklad s logovaním:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
fmt.Println("Zamykanie mutexu")
mu.Lock()
defer mu.Unlock()
fmt.Println("Mutex zamknutý")
m[key] = value
fmt.Println("Odomykanie mutexu")
}
Týmto spôsobom je možné nepriamo overiť, že sa vykonáva zámka, ale nie sú dostupné vstavané nástroje na kontrolu stavu mutexu.