Sobes.tech
Junior — Middle

Mutex түрүндөгү бөгөө механизми аркылуу Map объектисинин агым коопсуздугун кантип камсыз кылса болот?

sobes.tech AI

AIден жооп

Go тилинде, map объектисинин агымга коопсуздугун камсыздоо үчүн sync.Mutex колдонулушу мүмкүн. Стандарттык map көптөгөн агымдар үчүн коопсуз эмес, ошондуктан окуу жана жазуу операцияларын блоктоо менен коргоо керек.

Мисал:

import (
    "sync"
)

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

func NewSafeMap() *SafeMap {
    return &SafeMap{
        m: make(map[string]int),
    }
}

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

func (s *SafeMap) Set(key string, value int) {
    s.mu.Lock()
    defer s.mu.Unlock()
    s.m[key] = value
}

func (s *SafeMap) Delete(key string) {
    s.mu.Lock()
    defer s.mu.Unlock()
    delete(s.m, key)
}

Бул ыкма менен, ар бир map операциясынан мурда mutex жабылат, бул бир нече горугиндердин бир убакта киришин алдын алат жана жарыш шарттарын жокко чыгарат.