Junior — Middle
În ce condiții se realizează blocarea la utilizarea canalului standard de transmitere a datelor?
sobes.tech AI
Răspuns de la AI
În Go, canalul standard de transmitere a datelor se blochează în următoarele cazuri:
- La trimiterea unei valori în canal (
chan <- value), dacă canalul nu are buffer sau dacă bufferul este plin, gorutina care trimite se blochează până când alt fir citește valoarea. - La citirea din canal (
value := <- chan), dacă canalul este gol, gorutina care citește se blochează până când apar date.
Astfel, blocarea are loc atunci când se încearcă trimiterea de date într-un canal plin sau citirea dintr-un canal gol, asigurând sincronizarea între gorutine.
Exemplu:
ch := make(chan int) // canal fără buffer
// Trimiterea se blochează până când cineva citește
go func() {
ch <- 42
}()
valoare := <-ch // citirea deblochează trimiterea
fmt.Println(valoare)