Junior — Middle
შესაძლებელია თუ არა სხვადასხვა ნაკადებმა ერთდროულად იმუშაონ ერთსა და იმავე მეხსიერების მისამართთან?
sobes.tech AI
პასუხი AI-სგან
დიახ, Go-ში სხვადასხვა გორუტინები (თხელი) ერთდროულად შეიძლება მიუდგნენ ერთსა და იმავე მეხსიერების მისამართს. თუმცა, ეს შეიძლება გამოიწვიოს რბოლა (race conditions), თუ წვდომა არ არის სინქრონიზებული. უსაფრთხო ურთიერთქმედებისთვის საერთო მეხსიერებასთან გამოიყენება სინქრონიზაციის მექანიზმები, როგორიცაა მუტექსები (sync.Mutex), არხები (chan) ან sync/atomic პაკეტიდან ატომური ოპერაციები.
მუტექსის გამოყენების მაგალითი საერთო ცვლადის დაცვისთვის:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
counter++
mu.Unlock()
}
ამ ზომების გარეშე, ერთდროულად წვდომა შეიძლება გამოიწვიოს პროგრამის გაუთვალისწინებელ ქცევას.