Sobes.tech
Junior — Middle

Dasturda goroutinlarning bajarilishi va sinxronizatsiyasini qanday nazorat qilish amalga oshiriladi?

sobes.tech AI

AIdan javob

Go tilida, goroutinlarni bajarilishini nazorat qilish va sinxronizatsiya qilish odatda quyidagi vositalar yordamida amalga oshiriladi:

  • WaitGroup sync paketidan — goroutinlar guruhining yakunlanishini kutishga imkon beradi.
  • Kanal (channels) — goroutinlar o'rtasida ma'lumotlar va signallarni uzatish uchun ishlatiladi, sinxronizatsiyani ta'minlaydi.

WaitGroup bilan misol:

var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()
    // goroutinning ishlashi
}()
wg.Wait() // goroutin yakunlanishini kutamiz

Kanal yordamida, masalan, natijalar yoki yakunlanish signallarini uzatish mumkin:

ch := make(chan int)
go func() {
    ch <- 42 // qiymatni yuborish
}()
qiymat := <-ch // qiymatni qabul qilish, goroutinlarni sinxronlashtiradi

Shu sababli, WaitGroup va kanallar goroutinlarni nazorat qilish va sinxronizatsiya qilish uchun asosiy vositalardir.