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