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