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)