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