Sobes.tech
Junior — Middle

Ako skontrolovať, či bola vykonaná blokácia údajov pri použití mapy s mutexom?

sobes.tech AI

Odpoveď od AI

V jazyku Go, ak používate mutex na ochranu prístupu k mape, nemôžete priamo skontrolovať, či bola vykonaná zámka, pretože štandardný sync.Mutex neposkytuje metódy na kontrolu jeho stavu.

Avšak, môžete:

  • Použiť sync.RWMutex a starostlivo navrhnúť kód tak, aby boli zámky zrejmé.
  • V testoch alebo pri ladení pridať logovanie pred a po volaní Lock() a Unlock().
  • Pre pokročilejšiu kontrolu použiť sync.Mutex z balíka sync s obalmi, ktoré zaznamenávajú stav zámky (napríklad, boolean vlajku), ale to vyžaduje opatrnosť.

Príklad s logovaním:

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

func write(key string, value int) {
    fmt.Println("Zamykanie mutexu")
    mu.Lock()
    defer mu.Unlock()
    fmt.Println("Mutex zamknutý")
    m[key] = value
    fmt.Println("Odomykanie mutexu")
}

Týmto spôsobom je možné nepriamo overiť, že sa vykonáva zámka, ale nie sú dostupné vstavané nástroje na kontrolu stavu mutexu.