Back to questions
Junior — Middle
87
Какие действия выполняются при одновременной записи в канал двумя горутинами?
Companies where asked
Кадровое агентство BWG
Answer from AI
sobes.tech AI
В Go при одновременной записи в канал двумя горутинами происходит синхронизация через сам канал. Канал гарантирует, что запись и чтение происходят атомарно и последовательно.
Если две горутины пытаются записать в канал одновременно, одна из них будет блокирована до тех пор, пока другая не завершит запись. Таким образом, записи не перемешиваются и не теряются — каждая запись попадёт в канал по очереди.
Пример:
ch := make(chan int)
// Горутина 1
go func() {
ch <- 1 // запись в канал
}()
// Горутина 2
go func() {
ch <- 2 // запись в канал
}()
// Чтение из канала
fmt.Println(<-ch)
fmt.Println(<-ch)
В этом примере обе записи будут корректно помещены в канал, порядок может быть любым, но данные не потеряются и не смешаются.