GoDasturchi
WaitGroup: Coordinating Goroutines

WaitGroup: Coordinating Goroutines

WaitGroup: goroutinalarni muvofiqlashtirish

Introduction to Goroutines darsida ko'rgan muammoning yechimi — sync.WaitGroup: goroutinalar sonini hisoblab boradigan hisoblagich. U uchta metodga ega: Add(n) — "yana n ta goroutina kutilyapti", Done() — "men tugadim", va Wait() — hisoblagich nolga tushguncha bloklanib turadi.

example.go
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()  // funksiya qanday tugashidan qat'i nazar chaqiriladi
    // ish
}()
wg.Wait()  // shu yerda hammasi tugashini kutadi

Muhim nozik nuqta: agar goroutina tsikl o'zgaruvchisini to'g'ridan-to'g'ri ushlab qolsa, kutilmagan natijalar chiqishi mumkin. Xavfsiz andaza — qiymatlarni goroutina funksiyasiga parametr sifatida uzatish, xuddi Pointers & Memory kursida ko'rgan "qiymatni nusxalash orqali izolyatsiya qilish" g'oyasi kabi.

>_ Exercise

SumSquaresConcurrent(nums []int) int funksiyasini yozing. Har bir son uchun alohida goroutina ishga tushiring — u sonning kvadratini oldindan ajratilgan results slice'ining o'z indeksiga yozadi (shuning uchun umumiy holatga yozishda poyga sharoiti bo'lmaydi). sync.WaitGroup yordamida barcha goroutinalar tugashini kuting, so'ngra resultsdagi barcha qiymatlarni yig'ib, yig'indini qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

sync.WaitGroup (Add/Done/Wait) — goroutinalar tugashini kutishning standart usuli. Poyga sharoitidan qochish uchun har bir goroutina umumiy xotiraning o'z, boshqalar bilan kesishmaydigan qismiga yozishi kerak — masalan, slice'ning alohida indeksiga.

NEXT UP

Mutex: Protecting Shared Data

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

WaitGroup: Coordinating Goroutines

WaitGroup: goroutinalarni muvofiqlashtirish

Introduction to Goroutines darsida ko'rgan muammoning yechimi — sync.WaitGroup: goroutinalar sonini hisoblab boradigan hisoblagich. U uchta metodga ega: Add(n) — "yana n ta goroutina kutilyapti", Done() — "men tugadim", va Wait() — hisoblagich nolga tushguncha bloklanib turadi.

example.go
var wg sync.WaitGroup
wg.Add(1)
go func() {
    defer wg.Done()  // funksiya qanday tugashidan qat'i nazar chaqiriladi
    // ish
}()
wg.Wait()  // shu yerda hammasi tugashini kutadi

Muhim nozik nuqta: agar goroutina tsikl o'zgaruvchisini to'g'ridan-to'g'ri ushlab qolsa, kutilmagan natijalar chiqishi mumkin. Xavfsiz andaza — qiymatlarni goroutina funksiyasiga parametr sifatida uzatish, xuddi Pointers & Memory kursida ko'rgan "qiymatni nusxalash orqali izolyatsiya qilish" g'oyasi kabi.

>_ Exercise

SumSquaresConcurrent(nums []int) int funksiyasini yozing. Har bir son uchun alohida goroutina ishga tushiring — u sonning kvadratini oldindan ajratilgan results slice'ining o'z indeksiga yozadi (shuning uchun umumiy holatga yozishda poyga sharoiti bo'lmaydi). sync.WaitGroup yordamida barcha goroutinalar tugashini kuting, so'ngra resultsdagi barcha qiymatlarni yig'ib, yig'indini qaytaring.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

sync.WaitGroup (Add/Done/Wait) — goroutinalar tugashini kutishning standart usuli. Poyga sharoitidan qochish uchun har bir goroutina umumiy xotiraning o'z, boshqalar bilan kesishmaydigan qismiga yozishi kerak — masalan, slice'ning alohida indeksiga.

NEXT UP

Mutex: Protecting Shared Data