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)
}