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.