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

ამ ზომების გარეშე, ერთდროულად წვდომა შეიძლება გამოიწვიოს პროგრამის გაუთვალისწინებელ ქცევას.