Junior — Middle
Magyarázza el a goroutine-ok szinkronizációs mechanizmusának működési elvét a feladatok párhuzamos végrehajtásának kontextusában.
sobes.tech MI
Válasz az MI-től
A Go nyelvben a goroutine-ok könnyű szálak, amelyek párhuzamosan futnak. A goroutine-ok szinkronizálásához olyan mechanizmusokat használnak, amelyek koordinálják a hozzáférést a közös erőforrásokhoz és rendezik a végrehajtást.
Fő szinkronizációs mechanizmusok:
- Csatornák (channels): lehetővé teszik az adatok átvitelét a goroutine-ok között, és biztosítják a szinkronizációt üzenetváltás révén.
- Mutexek (sync.Mutex): blokkolják a hozzáférést a megosztott adatokhoz, elkerülve a versenyhelyzeteket.
- WaitGroup (sync.WaitGroup): lehetővé teszi egy goroutine-csoport befejezésének várását.
Példa csatornával:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // vár a csatornáról érkező adatra
fmt.Println("Kapott érték:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // adat küldése a csatornára
}
Itt a csatorna biztosítja a szinkronizációt: a worker goroutine vár, amíg a main értéket nem küld.