Junior — Middle
Standart məlumat ötürmə kanalı ilə işləyərkən hansı şərtlərdə bloklama həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Go dilində standart məlumat ötürmə kanalı aşağıdakı hallarda bloklanır:
- Kanalə dəyər göndərilərkən (
chan <- value), əgər kanal buffersizdirsə və ya buffer doludursa, göndərən goroutine başqa bir axın dəyəri oxuyana qədər bloklanır. - Kanaldan oxuyarkən (
value := <- chan), əgər kanal boşdursa, oxuyan goroutine məlumatlar görünənə qədər bloklanır.
Beləliklə, bloklama, dolu kanala məlumat göndərməyə və ya boş kanaldan oxumağa cəhd edərkən baş verir və bu, goroutine-lər arasında sinxronizasiyanı təmin edir.
Nümunə:
ch := make(chan int) // buffersiz kanal
// Göndərmə, kimsə oxuyana qədər bloklanır
go func() {
ch <- 42
}()
qiymət := <-ch // oxuma göndərməni blokdan çıxarır
fmt.Println(qiymət)