გთხოვთ, ახსენით, რა არის პირობითი ცვლადი და როგორ გამოიყენება ის ნაკადების სინქრონიზაციისთვის.
sobes.tech AI
პასუხი AI-სგან
შესაბამისობის ცვლადი (condition variable) არის სინქრონიზაციის მექანიზმი, რომელიც საშუალებას აძლევს ერთ ან რამდენიმე ნაკადს დაელოდოს გარკვეული პირობების შესრულებას, ხოლო სხვა ნაკადი მათ აცნობებს მდგომარეობის ცვლილების შესახებ.
Go-ში, შესაბამისობის ცვლადები განახორციელებულია sync.Cond ტიპის მეშვეობით. იგი მუშაობს ერთად მუტექსთან (sync.Mutex), რომელიც იცავს საერთო მონაცემებს. მოლოდინიანი ნაკადი იძახის Wait(), რაც თავისუფლდებს მუტექსს და ბლოკირდება, სანამ სხვა ნაკადი არ იძახის Signal() (ერთი ნაკადის გამოღვიძებისთვის) ან Broadcast() (ყველა მოლოდინისთვის).
გამოყენების მაგალითი:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// მოლოდინიანი ნაკადი
mu.Lock()
for !sharedDataReady {
cond.Wait() // თავისუფლდებს mu-ს და ელოდება სიგნალს
}
// აქ sharedDataReady == true
mu.Unlock()
// მდგომარეობის შეცვლის ნაკადი
mu.Lock()
sharedDataReady = true
cond.Signal() // ან cond.Broadcast(), მოლოდინების გასაღვიძებლად
mu.Unlock()
ამ გზით, შესაბამისობის ცვლადი ეხმარება სწორად ორგანიზებაში მოლოდინსა და შეტყობინებას შორის, თავიდან აცილების აქტიური სკანირებისა და შეჯახების პირობების.