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