Junior — Middle
Kako proveriti da li je izvršena blokada podataka prilikom korišćenja map sa mutexom?
sobes.tech АИ
Одговор од АИ
U Go-u, ako koristite mutex za zaštitu pristupa mapi, ne možete direktno proveriti da li je izvršeno zaključavanje, jer standardni sync.Mutex ne pruža metode za proveru njegovog stanja.
Međutim, možete:
- Koristiti
sync.RWMutexi pažljivo dizajnirati kod tako da zaključavanja budu očigledna. - U testovima ili tokom debugovanja dodati logove pre i posle poziva
Lock()iUnlock(). - Za napredniju kontrolu, koristiti
sync.Mutexiz paketasyncsa omotačima koji beleže stanje zaključavanja (npr. boolean zastavicu), ali to zahteva pažnju.
Primer sa logovanjem:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
fmt.Println("Zaključavanje mutexa")
mu.Lock()
defer mu.Unlock()
fmt.Println("Mutex zaključan")
m[key] = value
fmt.Println("Otključavanje mutexa")
}
Na ovaj način, indirektno se može uveriti da li se vrši zaključavanje, ali ne postoje ugrađeni alati za proveru stanja mutexa.