Sobes.tech
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 чека док главни не пошаље вредност.