Sobes.tech
Junior — Middle

Mutex kabi blokirovka mexanizmi yordamida Map ob'ektining oqim xavfsizligini qanday ta'minlash mumkin?

sobes.tech AI

AIdan javob

Go tilida, map ob'ektining iptidosizligini ta'minlash uchun sync.Mutex dan foydalanish mumkin. Standart map bir vaqtning o'zida kirishga xavfsiz emas, shuning uchun o'qish va yozish operatsiyalarini bloklash bilan himoyalash kerak.

Misol:

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)
}

Shu tarzda, har bir map operatsiyasidan oldin mutex bloklanadi, bu esa bir nechta goroutine'larning bir vaqtning o'zida kirishini oldini oladi va raqobat shartlarini bartaraf etadi.