Junior — Middle
სტანდარტული ბარათი უზრუნველყოფს პარალელურ უსაფრთხოებას ერთდროულად რამდენიმე ნაკადის მუშაობისას?
sobes.tech AI
პასუხი AI-სგან
Go-ის სტანდარტული რუკა (map) არ არის ნაკადი-უსაფრთხო ერთდროულად დაწერის ან წაკითხვის დროს რამდენიმე goroutine-დან. თუ რამდენიმე goroutine ერთდროულად მიმართავს რუკას სინქრონიზაციის გარეშე, ეს შეიძლება გამოიწვიოს პანიკას ან არასწორ მონაცემებს.
პარალელური უსაფრთხოების უზრუნველსაყოფად შეიძლება გამოიყენოთ:
- sync.Mutex რუკაზე წვდომის ბლოკისთვის
- sync.RWMutex წაკითხვასა და დაწერას შორის განყოფილებისთვის
- sync.Map — სპეციალიზებული, ნაკადი-უსაფრთხო მონაცემთა სტრუქტურა, რომელიც შემოიღეს Go 1.9-ში, ოპტიმიზირებულია კონკურენტული წვდომისთვის
sync.Map-ის გამოყენების მაგალითი:
var m sync.Map
m.Store("key", "value")
value, ok := m.Load("key")
ამიტომ, სტანდარტული რუკა არ არის ნაკადი-უსაფრთხო, მაგრამ არსებობს ინსტრუმენტები უსაფრთხო მუშაობისთვის მონაცემებთან კონკურენტულ გარემოში.