Sobes.tech
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тин абалын текшерүү үчүн ички каражаттар жок.