Sobes.tech
Middle — Middle+

Hogyan lehet biztonságosan dolgozni a Map gyűjteménnyel több szálas környezetben?

sobes.tech MI

Válasz az MI-től

Go-ban a standard map (térkép) nem biztonságos több goroutine egyidejű olvasására és írására. Többszálú környezetben a térkép biztonságos működésének biztosításához a következő megközelítéseket lehet alkalmazni:

  1. Szinkronizálás mutex segítségével

Használja a sync.Mutex vagy sync.RWMutex-t a térkép hozzáférésének védelmére. Íráskor zárja le a mutexet írásra, olvasáskor — olvasásra (ha RWMutex-t használ).

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. sync.Map használata

Go-ban létezik egy specializált struktúra, a sync.Map, amely optimalizált a konkurens hozzáférésre, és nem igényel manuális szinkronizációt.

import "sync"

var m sync.Map

// Írás
m.Store("key", 42)

// Olvasás
val, ok := m.Load("key")
  1. Csatornák (channels) használata

A hozzáférést a térképhez szervezheti egy goroutine segítségével, amely a kérésokat olvasásra és írásra csatornákon keresztül kezeli, biztosítva a szekvenciális hozzáférést.

A módszer kiválasztása a teljesítmény- és implementációs komplexitási követelményektől függ.