Senior
Melyik a listából szinkronizációs eszköz a Go-ban? Csatornák, sync.WaitGroup, sync.Mutex, sync.Cond?
sobes.tech MI
Válasz az MI-től
Go nyelvben minden felsorolt eszköz — csatornák (channels), sync.WaitGroup, sync.Mutex és sync.Cond — szinkronizációs mechanizmusok, de különböző célokra szolgálnak:
- Csatornák (channels) — biztonságosan cserélnek adatokat goroutine-ok között, és üzenetküldésen keresztül szinkronizálnak.
- sync.Mutex — kölcsönös kizárásra szolgáló mutex, megakadályozza a párhuzamos hozzáférést a megosztott erőforrásokhoz.
- sync.WaitGroup — lehetővé teszi, hogy várjon egy goroutine-csoport befejezésére, és szinkronizálja azokat.
- sync.Cond — feltételes változó, összetettebb szinkronizációra használják, amikor a goroutine-ok egy adott feltétel teljesülését várják.
Példa a sync.WaitGroup és a sync.Mutex használatára:
var mu sync.Mutex
var wg sync.WaitGroup
counter := 0
wg.Add(2)
go func() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}()
go func() {
defer wg.Done()
mu.Lock()
counter++
mu.Unlock()
}()
wg.Wait()
fmt.Println("Számláló:", counter)