Sobes.tech
Junior — Middle

Kuidas saab kontrollida, kas andmete lukustamine on toimunud, kasutades map koos mutex'iga?

sobes.tech AI

Vastus AI-lt

Go keeles, kui kasutate mutex'i, et kaitsta juurdepääsu kaardile, ei ole võimalik otseselt kontrollida, kas lock on toimunud, kuna standardne sync.Mutex ei paku meetodeid selle oleku kontrollimiseks.

Kuid, saate:

  • Kasutada sync.RWMutex ja hoolikalt kavandada koodi, et lukustused oleksid selged.
  • Testides või silumiseks lisada logimine enne ja pärast Lock() ja Unlock() väljakutseid.
  • Edasijõudnuma kontrolli jaoks kasutada sync.Mutex sync paketist koos ümbristega, mis registreerivad lukustamise oleku (näiteks, boolean lipp), kuid see nõuab ettevaatust.

Näide logimisega:

var mu sync.Mutex
var m = make(map[string]int)

func write(key string, value int) {
    fmt.Println("Mutex lukustamine")
    mu.Lock()
    defer mu.Unlock()
    fmt.Println("Mutex lukustatud")
    m[key] = value
    fmt.Println("Mutex vabastamine")
}

Sel viisil saab kaudselt veenduda, et lukustamine toimub, kuid sisseehitatud vahendeid mutex'i oleku kontrollimiseks ei ole.