Junior — Middle
Pod kojim uslovima se vrši blokiranje prilikom rada sa standardnim kanalom prenosa podataka?
sobes.tech АИ
Одговор од АИ
U Go-u, standardni kanal za prenos podataka blokira u sledećim slučajevima:
- Prilikom slanja vrednosti u kanal (
chan <- value), ako kanal nema bafer ili je bafer pun, gorutina koja šalje se blokira dok druga nit ne pročita vrednost. - Prilikom čitanja iz kanala (
value := <- chan), ako je kanal prazan, gorutina koja čita se blokira dok se ne pojave podaci.
Na taj način, blokada se dešava prilikom pokušaja slanja podataka u pun kanal ili čitanja iz praznog kanala, obezbeđujući sinhronizaciju između gorutina.
Primer:
ch := make(chan int) // kanal bez bafera
// Slanje se blokira dok neko ne pročita
go func() {
ch <- 42
}()
vrednost := <-ch // čitanje otključava slanje
fmt.Println(vrednost)