Sobes.tech
Intern

Go'da xarita oqish xavfsizmi?

sobes.tech AI

AIdan javob

Go tilida, mapdan o'qish, yozish bilan bir vaqtda amalga oshirilsa, oqim xavfsiz emas. Ko'p oqimli muhitda xavfsiz o'qish uchun sinxronizatsiya qilish kerak, masalan, sync.RWMutex yordamida o'qish va yozish uchun blokirovka qilish yoki maxsus ishlab chiqilgan sync.Map dan foydalanish.

sync.RWMutex bilan misol:

import (
    "sync"
)

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

func read(key string) (int, bool) {
    mu.RLock()         // o'qish uchun blokirovka
    defer mu.RUnlock() // blokirovkani ochish
    val, ok := m[key]
    return val, ok
}

func write(key string, val int) {
    mu.Lock()         // yozish uchun blokirovka
    defer mu.Unlock() // blokirovkani ochish
    m[key] = val
}

Yoki sync.Map dan foydalaning:

import "sync"

var m sync.Map

func read(key string) (interface{}, bool) {
    return m.Load(key)
}

func write(key string, val interface{}) {
    m.Store(key, val)
}

sync.Map ko'p raqobatli operatsiyalar uchun qulay, ammo uning ishlash va API xususiyatlari bor.