Junior — Middle
Map менен mutex колдонуп жатканда маалыматтарды блоктоо ишке ашканын кантип текшерсе болот?
sobes.tech AI
AIден жооп
Go тилинде, эгер сиз mapке кирүүнү коргоо үчүн mutex колдонуп жатсаңыз, блокировка жасалганын түздөн-түз текшерүү мүмкүн эмес, анткени стандарттык sync.Mutex анын абалын текшерүү үчүн методдорду камсыз кылбайт.
Бирок, сиз жасай аласыз:
sync.RWMutexколдонуп, кодду так дизайн кылуу, ошондо блокировкалар ачык болот.- Тесттерде же дебагда,
Lock()жанаUnlock()чакырууларынан алдын жана кийин лог жазууларын кошуу. - Жогорку деңгээлдеги көзөмөл үчүн,
sync.Mutexколдонуп, блокировка абалын каттаган капталыктарды (мисалы, boolean байрагы) колдонуу, бирок бул сактыкты талап кылат.
Лог менен мисал:
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тин абалын текшерүү үчүн ички каражаттар жок.