Junior — Middle
Selgitage goroutine'ide sünkronsüsteemi mehhanismi tööpõhimõtet konkurentsivõimelise ülesannete täitmise kontekstis.
sobes.tech AI
Vastus AI-lt
Go keeles on kergekaalulised goroutinid, mis töötavad samaaegselt. Goroutinide sünkroniseerimiseks kasutatakse mehhanisme, mis koordineerivad juurdepääsu jagatud ressurssidele ja korraldavad täitmise järjekorda.
Peamised sünkroniseerimismehhanismid:
- Kanalid (channels): võimaldavad andmete edastamist goroutinide vahel ning tagavad sünkroniseerimise sõnumite vahetamise kaudu.
- Mutexid (sync.Mutex): blokeerivad juurdepääsu jagatud andmetele, et vältida võistlusolukordi.
- WaitGroup (sync.WaitGroup): võimaldab oodata, kuni goroutinide grupp lõpetab.
Näide kanali kasutamisest:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // ootab andmeid kanalilt
fmt.Println("Saadud väärtus:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // saadab andmed kanalile
}
Siin tagab kanal sünkroniseerimise: worker goroutine ootab, kuni main saadab väärtuse.