Sobes.tech
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.