Sobes.tech
Назад к вопросам
Junior — Middle
88

Какие действия выполняются при одновременной записи в канал двумя горутинами?

Компании, где спрашивали
Кадровое агентство BWG

Ответ от нейросети

sobes.tech AI

В Go при одновременной записи в канал двумя горутинами происходит синхронизация через сам канал. Канал гарантирует, что запись и чтение происходят атомарно и последовательно.

Если две горутины пытаются записать в канал одновременно, одна из них будет блокирована до тех пор, пока другая не завершит запись. Таким образом, записи не перемешиваются и не теряются — каждая запись попадёт в канал по очереди.

Пример:

ch := make(chan int)

// Горутина 1
go func() {
    ch <- 1 // запись в канал
}()

// Горутина 2
go func() {
    ch <- 2 // запись в канал
}()

// Чтение из канала
fmt.Println(<-ch)
fmt.Println(<-ch)

В этом примере обе записи будут корректно помещены в канал, порядок может быть любым, но данные не потеряются и не смешаются.