Sobes.tech
Middle+

Milyen goroutine szinkronizációs primitívek léteznek a Go-ban?

sobes.tech MI

Válasz az MI-től

Go nyelven a goroutine-ok szinkronizálására szolgáló alapvető primitívek a következők:

  • Mutex (sync.Mutex) — biztosítja a kölcsönös kizárást, blokkolva a hozzáférést a megosztott erőforrásokhoz.
  • RWMutex (sync.RWMutex) — a Mutex kiterjesztése, lehetővé teszi több goroutine olvasását egyidejűleg, de blokkolja az írást.
  • WaitGroup (sync.WaitGroup) — lehetővé teszi, hogy várjunk egy vagy több goroutine befejezésére.
  • Channel (chan) — adatátviteli csatorna goroutine-ok között, üzenetküldésen keresztül szinkronizál.
  • Once (sync.Once) — garantálja, hogy egy adott függvény csak egyszer fusson le.
  • Cond (sync.Cond) — összetettebb szinkronizációs változó, például egy állapot várására.

Példa a WaitGroup és Mutex használatára:

var mu sync.Mutex
var wg sync.WaitGroup
var counter int

func increment() {
    defer wg.Done()
    mu.Lock()
    counter++
    mu.Unlock()
}

func main() {
    wg.Add(3)
    go increment()
    go increment()
    go increment()
    wg.Wait()
    fmt.Println("Számláló:", counter)
}