Junior — Middle
Standart ma'lumot uzatish kanali bilan ishlashda qachon blokirovka amalga oshiriladi?
sobes.tech AI
AIdan javob
Go tilida standart ma'lumot uzatish kanali quyidagi holatlarda bloklanadi:
- Kanalga qiymat yuborishda (
chan <- value), agar kanal buffersiz yoki buffer to'ldirilgan bo'lsa, yuboruvchi gorutina boshqa oqim qiymatni o'qigunga qadar bloklanadi. - Kanaldan o'qishda (
value := <- chan), agar kanal bo'sh bo'lsa, o'qiydigan gorutina ma'lumotlar paydo bo'lgunga qadar bloklanadi.
Shunday qilib, blokirovka to'ldirilgan kanalga ma'lumot yuborishga yoki bo'sh kanaldan o'qishga urinishda yuzaga keladi va bu gorutinalar o'rtasida sinxronizatsiyani ta'minlaydi.
Misol:
ch := make(chan int) // buffersiz kanal
// Yuborish, kimdir o'qigunga qadar bloklanadi
go func() {
ch <- 42
}()
qiymat := <-ch // o'qish yuborishni bloklaydi
fmt.Println(qiymat)