Sobes.tech
Back to questions
Junior — Middle
85

Объясните принцип работы механизма синхронизации горутин в контексте конкурентного выполнения задач.

Answer from AI

sobes.tech AI

В Go горутины — это легковесные потоки, которые выполняются конкурентно. Для синхронизации горутин используются механизмы, позволяющие координировать доступ к общим ресурсам и упорядочивать выполнение.

Основные механизмы синхронизации:

  • Каналы (channels): позволяют передавать данные между горутинами, обеспечивая синхронизацию через обмен сообщениями.
  • Мьютексы (sync.Mutex): блокируют доступ к разделяемым данным, чтобы избежать гонок.
  • WaitGroup (sync.WaitGroup): позволяет ждать завершения группы горутин.

Пример с каналом:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // ждем данные из канала
    fmt.Println("Получено значение:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // отправляем данные в канал
}

Здесь канал обеспечивает синхронизацию: горутина worker ждет, пока main отправит значение.