Junior — Middle
Kaip galima patikrinti, ar naudojant map su mutex buvo atliktas duomenų blokavimas?
sobes.tech AI
Atsakymas iš AI
Go kalboje, jei naudojate mutex'ą norėdami apsaugoti prieigą prie žemėlapio, tiesiogiai patikrinti, ar įvyko užrakinimas, neįmanoma, nes standartinis sync.Mutex nepateikia metodų jo būsenos patikrinimui.
Tačiau, galite:
- Naudoti
sync.RWMutexir kruopščiai projektuoti kodą, kad užrakinimai būtų aiškūs. - Testuose ar derinimo metu pridėti žurnalavimą prieš ir po
Lock()irUnlock()iškvietimų. - Dėl pažangesnės kontrolės naudoti
sync.Mutexišsyncpaketo su apvalkalais, kurie įrašo užrakinimo būseną (pavyzdžiui, boolean žymeklį), tačiau tai reikalauja atsargumo.
Pavyzdys su žurnalavimu:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
fmt.Println("Užrakinama mutex")
mu.Lock()
defer mu.Unlock()
fmt.Println("Mutex užrakintas")
m[key] = value
fmt.Println("Atrakinta mutex")
}
Šiuo būdu galima netiesiogiai įsitikinti, kad įvyksta užrakinimas, tačiau nėra įmontuotų priemonių mutex būsenos patikrinimui.