Middle+
რა primitives არსებობს Go-ში goroutine-ების სინქრონიზაციისთვის?
sobes.tech AI
პასუხი AI-სგან
Go ტილში, გორუტინების სინქრონიზაციისთვის გამოიყენება შემდეგი ძირითადი პრიმიტივები:
- Mutex (sync.Mutex) — უზრუნველყოფს ურთიერთგამორიცხვას, ბლოკავს წვდომას გაზიარებულ რესურსებზე.
- RWMutex (sync.RWMutex) — გაფართოება Mutex-ის, რომელიც საშუალებას აძლევს რამდენიმე გორუტინს ერთდროულად კითხულოს, მაგრამ ბლოკავს დაწერას.
- WaitGroup (sync.WaitGroup) — საშუალებას აძლევს დაელოდოს გორუტინების ჯგუფის დასრულებას.
- Channel (chan) — არხი მონაცემების გადაცემისთვის გორუტინებს შორის, უზრუნველყოფს სინქრონიზაციას შეტყობინებების გადაცემით.
- Once (sync.Once) — გარანტიას იძლევა, რომ გარკვეული ფუნქცია მხოლოდ ერთხელ შესრულდება.
- Cond (sync.Cond) — პირობიანი ცვლადი უფრო რთული სინქრონიზაციისთვის, მაგალითად, გარკვეული მდგომარეობის მოლოდინისთვის.
მაგალითი WaitGroup და Mutex-ის გამოყენების:
var mu sync.Mutex
var wg sync.WaitGroup
var counter int
func increment() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}
func main() {
wg.Add(3)
go increment()
go increment()
go increment()
wg.Wait()
fmt.Println("კონტროლერი:", counter)
}