Sobes.tech
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.RWMutex ir kruopščiai projektuoti kodą, kad užrakinimai būtų aiškūs.
  • Testuose ar derinimo metu pridėti žurnalavimą prieš ir po Lock() ir Unlock() iškvietimų.
  • Dėl pažangesnės kontrolės naudoti sync.Mutexsync paketo 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.