Middle+
Ce primitive de sincronizare a goroutine-urilor există în Go?
sobes.tech AI
Răspuns de la AI
În Go, primitivele principale utilizate pentru sincronizarea gorutinelor sunt:
- Mutex (sync.Mutex) — asigură excluderea reciprocă, blocând accesul la resursele partajate.
- RWMutex (sync.RWMutex) — extindere a Mutex, permite mai multor gorutine să citească simultan, dar blochează scrierea.
- WaitGroup (sync.WaitGroup) — permite așteptarea finalizării unui set de gorutine.
- Channel (chan) — canal pentru transmiterea datelor între gorutine, asigură sincronizarea prin transmiterea mesajelor.
- Once (sync.Once) — garantează că o anumită funcție va fi executată o singură dată.
- Cond (sync.Cond) — variabilă condițională pentru sincronizare mai complexă, de exemplu, așteptarea unui anumit stat.
Exemplu de utilizare a WaitGroup și Mutex:
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("Counter:", counter)
}