Sobes.tech
Junior — Middle

Standart veri iletim kanalı kullanılırken hangi koşullarda blokaj gerçekleşir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, standart veri iletim kanalı aşağıdaki durumlarda bloklanır:

  • Kanalına değer gönderirken (chan <- value), kanal tamponu yoksa veya tampon doluysa, gönderen goroutine başka bir thread değeri okumaya başlayana kadar bloklanır.
  • Kanaldan okuma yaparken (value := <- chan), kanal boşsa, okuyan goroutine veri gelene kadar bloklanır.

Bu nedenle, bloklama, dolu bir kanala veri göndermeye veya boş bir kanaldan okumaya çalışırken gerçekleşir ve bu, goroutine'ler arasında senkronizasyon sağlar.

Örnek:

ch := make(chan int) // tamponsuz kanal

// Gönderim, birisi okumaya başlayana kadar bloklanır
go func() {
    ch <- 42
}()

val := <-ch // okuma, gönderimi serbest bırakır
fmt.Println(val)