Back to questions
Junior — Middle
76
При каких условиях осуществляется блокировка при работе с стандартным каналом передачи данных?
Companies where asked
Цифровая Эволюция
Answer from AI
sobes.tech AI
В Go стандартный канал передачи данных блокируется в следующих случаях:
- При отправке значения в канал (
chan <- value), если канал небуферизированный или буфер заполнен, отправляющая горутина блокируется до тех пор, пока другой поток не прочитает значение. - При чтении из канала (
value := <- chan), если канал пуст, читающая горутина блокируется до появления данных.
Таким образом, блокировка происходит при попытке отправить данные в полный канал или прочитать из пустого канала, обеспечивая синхронизацию между горутинами.
Пример:
ch := make(chan int) // небуферизированный канал
// Отправка блокируется, пока кто-то не прочитает
go func() {
ch <- 42
}()
val := <-ch // чтение разблокирует отправку
fmt.Println(val)