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