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