Senior
Milyen szinkronizációs primitíveket ismer?
sobes.tech MI
Válasz az MI-től
Go nyelvben több alapvető szinkronizációs primitív van a forrásokhoz való konkurrent hozzáférés kezelésére:
- Mutex (sync.Mutex) — biztosítja a kölcsönös kizárást, blokkolva a hozzáférést a kritikus szekcióhoz.
- RWMutex (sync.RWMutex) — kiterjesztett mutex, amely lehetővé teszi több olvasónak, hogy egyszerre olvassanak, de blokkolja az írást.
- WaitGroup (sync.WaitGroup) — lehetővé teszi, hogy várjunk egy csoport goroutine befejezésére.
- Cond (sync.Cond) — feltételes változó, amely értesíti a goroutine-okat egy esemény bekövetkezéséről.
- Atomi műveletek (sync/atomic) — alacsony szintű műveletek változók atomikus olvasására és írására.
Ezen kívül, Go-ban széles körben használnak csatornákat (channels), amelyek lehetővé teszik a goroutine-ok szinkronizálását és adatok átadását közöttük anélkül, hogy explicit mutexeket használnánk.
Mutex példája:
var mu sync.Mutex
var counter int
func increment() {
mu.Lock()
defer mu.Unlock()
counter++
}
WaitGroup példája:
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
// munka
}()
go func() {
defer wg.Done()
// munka
}()
wg.Wait()