Sobes.tech
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.RWMutex i pažljivo dizajnirati kod tako da zaključavanja budu očigledna.
  • U testovima ili tokom debugovanja dodati logove pre i posle poziva Lock() i Unlock().
  • Za napredniju kontrolu, koristiti sync.Mutex iz paketa sync sa 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.