Junior — Middle
W jakich warunkach następuje blokada podczas pracy z standardowym kanałem transmisji danych?
sobes.tech AI
Odpowiedź od AI
W Go standardowy kanał przesyłania danych blokuje się w następujących przypadkach:
- Przy wysyłaniu wartości do kanału (
chan <- value), jeśli kanał nie ma bufora lub bufor jest pełny, gorutyna wysyłająca blokuje się do momentu, aż inny wątek odczyta wartość. - Przy odczycie z kanału (
value := <- chan), jeśli kanał jest pusty, gorutyna odczytująca blokuje się do momentu pojawienia się danych.
W ten sposób blokada występuje podczas próby wysłania danych do pełnego kanału lub odczytu z pustego kanału, zapewniając synchronizację między gorutynami.
Przykład:
ch := make(chan int) // kanał bez bufora
// Wysyłanie blokuje się, dopóki ktoś nie odczyta
go func() {
ch <- 42
}()
wartość := <-ch // odczyt odblokowuje wysyłanie
fmt.Println(wartość)