Sobes.tech
Junior — Middle

Vysvetlite princíp fungovania synchronizačného mechanizmu gorutín v kontexte konkurenčného vykonávania úloh.

sobes.tech AI

Odpoveď od AI

V jazyku Go sú goroutines ľahké vlákna, ktoré bežia súbežne. Na synchronizáciu goroutines sa používajú mechanizmy, ktoré koordinujú prístup ku zdieľaným zdrojom a riadia vykonávanie.

Hlavné mechanizmy synchronizácie:

  • Kanály (channels): umožňujú prenos dát medzi goroutines a zabezpečujú synchronizáciu výmenou správ.
  • Mutexy (sync.Mutex): blokujú prístup ku zdieľaným dátam, aby sa predišlo súťažiam.
  • WaitGroup (sync.WaitGroup): umožňuje čakať na dokončenie skupiny goroutines.

Príklad s kanálom:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // čaká na dáta z kanála
    fmt.Println("Prijatá hodnota:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // posiela dáta do kanála
}

Tu kanál zabezpečuje synchronizáciu: goroutine worker čaká, kým main nepošle hodnotu.