Junior — Middle
Za akých podmienok sa vykonáva blokovanie pri práci so štandardným kanálom prenosu dát?
sobes.tech AI
Odpoveď od AI
V Go-ju, standardni kanal za prenos podatkov blokira v naslednjih primerih:
- Pri pošiljanju vrednosti v kanal (
chan <- value), če kanal nima predpomnilnika ali je poln, pošiljajoča gorutina blokira, dokler drug nit ne prebere vrednosti. - Pri branju iz kanala (
value := <- chan), če je kanal prazen, bralna gorutina blokira, dokler se ne pojavijo podatki.
Tako blokiranje nastopi pri poskusu pošiljanja podatkov v poln kanal ali branja iz praznega kanala, kar zagotavlja sinhronizacijo med gorutinami.
Primer:
ch := make(chan int) // kanal brez predpomnilnika
// Pošiljanje se blokira, dokler nekdo ne prebere
go func() {
ch <- 42
}()
vrednost := <-ch // branje odblokira pošiljanje
fmt.Println(vrednost)