Sobes.tech
Junior — Middle

როგორ უზრუნველვყოთ უსაფრთხო წვდომა ბარათზე მრავალთრანული გარემოში?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, მრავალთრედული გარემოსთვის უსაფრთხო წვდომისათვის რუკაზე (map) საჭიროა სინქრონიზაციის გამოყენება, რადგან map არ არის თრედ-უსაფრთხო მონაცემთა სტრუქტურა. ყველაზე გავრცელებული მეთოდია mutex-ის (sync.Mutex ან sync.RWMutex) გამოყენება წაკითხვასა და დაწერაზე წვდომის ბლოკირებისთვის.

მაგალითი sync.RWMutex-ის გამოყენებით:

import (
    "sync"
)

var (
    m = make(map[string]int)
    mu sync.RWMutex
)

func read(key string) int {
    mu.RLock()         // ბლოკირება წაკითხვაზე
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // ბლოკირება დაწერაზე
    defer mu.Unlock()
    m[key] = value
}

ასევე, Go-ში არსებობს sync.Map ტიპი, რომელიც ახორციელებს თრედ-უსაფრთხო რუკას, ოპტიმიზაციებით ხშირი წაკითხვებისთვის. შეიძლება გამოიყენოთ, თუ სჭირდებათ მკაცრი ტიპიზაცია და სოლიდურობა:

import "sync"

var m sync.Map

m.Store("key", 42)          // შენახვა
value, ok := m.Load("key")  // წაკითხვა

ამ გზით, მრავალთრედული გარემოსთვის უსაფრთხო წვდომისთვის გამოიყენეთ mutex-ები ან sync.Map.