Назад к вопросам
Junior — Middle
84
Объясните принцип работы механизма синхронизации горутин в контексте конкурентного выполнения задач.
Ответ от нейросети
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 отправит значение.