Sobes.tech
Junior — Middle

İşlərin eyni vaxtda yerinə yetirilməsi kontekstində goroutinlərin sinxronizasiya mexanizminin işləmə prinsipini izah edin.

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, goroutine-lər yüngül çəkili axınlardır və eyni vaxtda işləyirlər. Goroutine-ləri sinxronizasiya etmək üçün, ümumi resurslara girişin koordine olunması və icra sırasını tənzimləyən mexanizmlər istifadə olunur.

Əsas sinxronizasiya mexanizmləri:

  • Kanallar (channels): goroutine-lər arasında məlumat ötürməyə imkan verir və mesaj mübadiləsi vasitəsilə sinxronizasiyanı təmin edir.
  • Mutexlər (sync.Mutex): paylaşılan məlumatlara girişin qarşısını alır və yarış vəziyyətlərinin qarşısını alır.
  • WaitGroup (sync.WaitGroup): bir qrup goroutine-in tamamlanmasını gözləməyə imkan verir.

Kanal ilə nümunə:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // kanaldan məlumat gözləyir
    fmt.Println("Qəbul edilən dəyər:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // kanala məlumat göndərir
}

Burada, kanal sinxronizasiyanı təmin edir: worker goroutine-i, main dəyər göndərənə qədər gözləyir.