Sobes.tech
Junior — Middle

Ko'p ipli muhitda kartaga xavfsiz kirishni qanday ta'minlash mumkin?

sobes.tech AI

AIdan javob

Go tilida, ko'p ipli muhitda xaritaga (map) xavfsiz kirish uchun sinxronizatsiya qilish zarur, chunki map ipli xavfsiz bo'lmagan ma'lumotlar tuzilmasidir. Eng keng tarqalgan usul — mutex (sync.Mutex yoki sync.RWMutex) dan foydalanib, o'qish va yozish vaqtida kirishni bloklash.

sync.RWMutex bilan misol:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // o'qish uchun bloklash
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // yozish uchun bloklash
    defer mu.Unlock()
    m[key] = value
}

Shuningdek, Go da sync.Map turi ham mavjud, u ko'p ipli xavfsiz xaritani amalga oshiradi va tez-tez o'qish operatsiyalari uchun optimallashtirilgan. Agar qat'iy tiplash talab qilinmasa va soddalik kerak bo'lsa, foydalanish mumkin:

import "sync"

var m sync.Map

m.Store("key", 42)          // yozish
value, ok := m.Load("key")  // o'qish

Shunday qilib, ko'p ipli muhitda xavfsiz kirish uchun mutexlar yoki sync.Map dan foydalaning.