Goroutine'lar
Goroutine — Go ish vaqti (runtime) boshqaradigan yengil oqim (thread).
go f(x, y, z)
quyidagini bajaruvchi yangi goroutine ishga tushiradi:
f(x, y, z)
f, x, y va z ning hisoblanishi joriy goroutine'da ro'y beradi, f ning bajarilishi esa yangi goroutine'da.
Goroutine'lar bir xil manzil fazosida ishlaydi, shuning uchun umumiy xotiraga murojaat sinxronlashtirilishi kerak.
sync paketi foydali primitivlarni taqdim etadi, lekin Goda ularga ko'p ehtiyoj bo'lmaydi, chunki boshqa primitivlar mavjud. (Keyingi sahifaga qarang.)
Yechimni kodning pastki qismidagi
Topshiriqlarbo'limiga yozing, so'ng Submit tugmasini bosing. Mavzu mustahkam o'zlashishi uchun ikkala topshiriqni ham bajaring.
Kvadratlar(sonlar []int) []int funksiyasini yozing: har bir sonning kvadratini alohida goroutine'da hisoblasin (har bir goroutine natijani natija slice'ining o'z indeksiga yozsin) va hammasi tugagach, natijani qaytarsin. Kutish uchun sync.WaitGroup dan foydalaning ("sync" paketini import qiling). Masalan, Kvadratlar([]int{1, 2, 3}) — [1 4 9].
IkkalasiniKut(f1, f2 func()) funksiyasini yozing: f1 va f2 ni bir vaqtda (ikki goroutine'da) ishga tushirsin va ikkalasi ham tugaguncha kutsin. Testda f1 f2 signal berguncha bloklanadi, shuning uchun ularni ketma-ket ishga tushirsangiz dastur qotib qoladi.