Sobes.tech
Junior — Middle

Чӣ гуна метавон санҷид, ки оё блокиратсияи маълумотҳо ҳангоми истифодаи харита бо mutex иҷро шудааст?

sobes.tech AI

Ҷавоб аз AI

Дар Go, агар шумо mutex-ро барои ҳимояи дастрасӣ ба харита истифода баред, наметавонед мустақиман санҷед, ки оё бастани он иҷро шудааст ё не, зеро sync.Mutex стандартӣ усулҳои барои санҷиши ҳолати он намедиҳад.

Аммо, шумо метавонед:

  • sync.RWMutex-ро истифода баред ва коди худро бодиққат тарҳрезӣ кунед, то бастаниҳо равшан бошанд.
  • Дар тестҳо ё ҳангоми Debug, логгириро пеш ва баъд аз даъвати Lock() ва Unlock() илова кунед.
  • Барои назорати пешрафта, sync.Mutex-ро аз пакети sync бо wrappers истифода баред, ки ҳолати бастани онро сабт мекунанд (масалан, рамзи булӣ), аммо ин эҳтиёткориро талаб мекунад.

Масалан бо логгирӣ:

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

func write(key string, value int) {
    fmt.Println("Бастани mutex")
    mu.Lock()
    defer mu.Unlock()
    fmt.Println("Mutex баста шуд")
    m[key] = value
    fmt.Println("Розӣ кардани mutex")
}

Бо ин роҳ, ба таври ғайримустақим метавон боварӣ ҳосил кард, ки бастани рӯй медиҳад, аммо воситаҳои дарунсохт барои санҷиши ҳолати mutex вуҷуд надоранд.