Middle+
Kādas sinhronizācijas primitives pastāv Go valodā goroutine'iem?
sobes.tech AI
Atbilde no AI
Go dilində, goroutinləri sinxronlaşdırmaq üçün istifadə olunan əsas primitivlər bunlardır:
- Mutex (sync.Mutex) — qarşılıqlı istisnaları təmin edir, bölüşülən resurslara girişləri bloklayır.
- RWMutex (sync.RWMutex) — Mutex-in genişləndirilmiş formasıdır, bir neçə goroutine-in eyni zamanda oxumasına imkan verir, lakin yazmanı bloklayır.
- WaitGroup (sync.WaitGroup) — goroutine-lərin tamamlanmasını gözləməyə imkan verir.
- Channel (chan) — goroutine-lər arasında məlumat ötürmək üçün kanal, mesajlar vasitəsilə sinxronizasiya təmin edir.
- Once (sync.Once) — müəyyən bir funksiyanın yalnız bir dəfə işləməsini təmin edir.
- Cond (sync.Cond) — daha mürəkkəb sinxronizasiya üçün şərti dəyişən, məsələn, müəyyən bir vəziyyəti gözləmək.
WaitGroup və Mutex istifadə nümunəsi:
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("Sayğac:", counter)
}