Sobes.tech
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)