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

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

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

sobes.tech AI

В Go конкуренция за данные при параллельной работе горутин устраняется с помощью нескольких механизмов:

  1. Мьютексы (sync.Mutex) — позволяют блокировать доступ к общим данным, чтобы в каждый момент времени только одна горутина могла их изменять.
var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}
  1. Каналы (channels) — позволяют передавать данные между горутинами безопасно без явной блокировки, реализуя модель CSP (Communicating Sequential Processes).
ch := make(chan int)

func worker() {
    val := <-ch // получение данных
    // обработка val
}

func main() {
    go worker()
    ch <- 42 // отправка данных
}
  1. Пакет sync/atomic — для атомарных операций с переменными (например, инкремент счетчика) без блокировок.

Таким образом, Go предлагает как низкоуровневые примитивы синхронизации, так и высокоуровневые каналы для безопасной работы с общими данными в параллельных горутинах.