Sobes.tech
Junior — Middle

Kako obezbediti siguran pristup karti u višestrukom okruženju?

sobes.tech АИ

Одговор од АИ

У Go-у, за безбедан приступ мапи (map) у мулти-тред средини, потребно је користити синхронизацију, јер map није структура података безбедна за тредове. Најчешћи начин је коришћење мјутекса (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")  // читање

Дакле, за безбедан приступ мапи у мулти-тред окружењу, користите мјутексе или sync.Map.