Sobes.tech
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")

ამიტომ, სტანდარტული რუკა არ არის ნაკადი-უსაფრთხო, მაგრამ არსებობს ინსტრუმენტები უსაფრთხო მუშაობისთვის მონაცემებთან კონკურენტულ გარემოში.