Junior — Middle
Objasnite princip rada mehanizma za sinhronizaciju gorutina u kontekstu konkurentnog izvršavanja zadataka.
sobes.tech АИ
Одговор од АИ
У Језику 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 чека док главни не пошаље вредност.