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.