Sobes.tech
Middle — Middle+

Kako osigurati sigurnu rad s kolekcijom Map u višestrukom okruženju?

sobes.tech АИ

Одговор од АИ

U Go, standardna mapa (map) nije sigurna za istovremeni pristup za čitanje i pisanje iz različitih gorutina. Da biste osigurali sigurnu rad sa mapom u višestrukom okruženju, možete koristiti sledeće pristupe:

  1. Sinhronizacija pomoću mutexa

Koristite sync.Mutex ili sync.RWMutex za zaštitu pristupa mapi. Pri pisanju zaključajte mutex za pisanje, a pri čitanju — za čitanje (ako koristite RWMutex).

import "sync"

type SafeMap struct {
    mu sync.RWMutex
    m  map[string]int
}

func (s *SafeMap) Get(key string) (int, bool) {
    s.mu.RLock()
    defer s.mu.RUnlock()
    val, ok := s.m[key]
    return val, ok
}

func (s *SafeMap) Set(key string, val int) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.m[key] = val
}
  1. Korišćenje sync.Map

U Go, postoji specijalna struktura sync.Map, koja je optimizovana za konkurentan pristup i ne zahteva ručno sinhronizovanje.

import "sync"

var m sync.Map

// Pisanje
m.Store("key", 42)

// Čitanje
val, ok := m.Load("key")
  1. Korišćenje kanala (channels)

Možete organizovati pristup mapi putem gorutine koja obrađuje zahteve za čitanje i pisanje putem kanala, obezbeđujući sekvencijalni pristup.

Izbor metode zavisi od specifičnih zahteva za performanse i složenost implementacije.