Junior — Middle
Onder welke voorwaarden wordt de blokkering uitgevoerd bij het werken met het standaard datatransmissiekanaal?
sobes.tech AI
Antwoord van AI
In Go wordt het standaard dataverzendkanaal geblokkeerd in de volgende gevallen:
- Bij het verzenden van een waarde naar het kanaal (
chan <- value), als het kanaal geen buffer heeft of de buffer vol is, wordt de verzendende goroutine geblokkeerd totdat een andere thread de waarde leest. - Bij het lezen uit het kanaal (
value := <- chan), als het kanaal leeg is, wordt de leesgoroutine geblokkeerd totdat er gegevens beschikbaar zijn.
Zo vindt de blokkering plaats bij het proberen gegevens te verzenden naar een vol kanaal of te lezen uit een leeg kanaal, wat synchronisatie tussen goroutines garandeert.
Voorbeeld:
ch := make(chan int) // kanaal zonder buffer
// Verzenden wordt geblokkeerd totdat iemand leest
go func() {
ch <- 42
}()
waarde := <-ch // lezen ontgrendelt de verzending
fmt.Println(waarde)