Sobes.tech
Junior — Middle

Чӣ гуна метавон ба дастрасии бехатар ба карта дар муҳити бисёрсоҳавӣ таъмин кард?

sobes.tech AI

Ҷавоб аз AI

Дар Go, барои дастрасии бехатар ба харита (map) дар муҳити бисёртредӣ, зарур аст, ки истифодаи ҳамоҳангсозиро истифода баред, зеро map структураи маълумоти бехатар барои тред нест. Беҳтарин усул истифодаи mutex (sync.Mutex ё sync.RWMutex) барои бастани дастрасӣ ҳангоми хондан ва навишт аст.

Масалан бо истифодаи sync.RWMutex:

import (
    "sync"
)

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

func read(key string) int {
    mu.RLock()         // бастан барои хондан
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // бастан барои навишт
    defer mu.Unlock()
    m[key] = value
}

Ҳамчунин дар Go мавҷуд аст навъи sync.Map, ки харитаи бехатар барои тредҳоро бо оптимизатсияҳо барои амалҳои зуд-зуд хондан амалӣ мекунад. Он метавонад истифода шавад, агар ниёз ба типи қатъӣ набошад ва соддагӣ талаб карда шавад:

import "sync"

var m sync.Map

m.Store("key", 42)          // навишт
value, ok := m.Load("key")  // хондан

Бинобар ин, барои дастрасии бехатар ба харита дар муҳити бисёртредӣ, mutexҳо ё sync.Map-ро истифода баред.