Junior — Middle
Izskaidrojiet goroutine sinhronizācijas mehānisma darbības principu konkurējošu uzdevumu izpildes kontekstā.
sobes.tech AI
Atbilde no AI
Go valodā goroutines ir viegli svari pavedieni, kas tiek izpildīti paralēli. Lai sinhronizētu goroutines, tiek izmantoti mehānismi, kas koordinē piekļuvi kopīgiem resursiem un kārto izpildi.
Galvenie sinhronizācijas mehānismi:
- Kanāli (channels): ļauj pārsūtīt datus starp goroutines un nodrošina sinhronizāciju, apmainoties ar ziņojumiem.
- Mutex (sync.Mutex): bloķē piekļuvi kopīgiem datiem, lai novērstu sacensību apstākļus.
- WaitGroup (sync.WaitGroup): ļauj gaidīt, kamēr grupa goroutine pabeigs darbu.
Piemērs ar kanālu:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // gaida datus no kanāla
fmt.Println("Saņemta vērtība:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // sūta datus uz kanāla
}
Šeit kanāls nodrošina sinhronizāciju: worker goroutine gaida, kamēr galvenā funkcija nosūtīs vērtību.