Sobes.tech
Junior — Middle

Чӣ тавр метавон бехатарии ҷараёнро барои объекти Map бо истифода аз механизмҳои бастани Mutex таъмин кард?

sobes.tech AI

Ҷавоб аз AI

В Go, барои таъмини бехатарии ҷараёнҳои объект map, мумкин аст аз mutex (sync.Mutex) истифода бурда шавад. Аз он ҷиҳат, ки map стандартӣ бехатар барои дастрасии ҳамзамон нест, бояд амалиётҳои хондан ва навиштро бо бастани mutex ҳимоя кард.

Масалан:

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 баста мешавад, ки ин имкон медиҳад, ки дастрасӣ дар як вақт аз ҷониби чанд goroutine пешгирӣ шавад ва ҳолати рақобатро бартараф мекунад.