Junior — Middle
Použili ste v svojich projektoch mechanizmus synchronizácie pomocou sync.Cond?
sobes.tech AI
Odpoveď od AI
V projektoch v Go som použil sync.Cond na organizáciu čakania a oznámenia medzi gorutinami, keď bolo potrebné implementovať podmienkovú synchronizáciu. Napríklad, keď jedna gorutina musí čakať, kým iná vykoná určitú akciu alebo zmení stav.
Príklad použitia sync.Cond:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
mu := sync.Mutex{}
cond := sync.NewCond(&mu)
ready := false
go func() {
time.Sleep(time.Second)
mu.Lock()
ready = true
cond.Signal() // oznamujeme čakajúcej gorutine
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // čakáme na signál
}
fmt.Println("Gorutina pripravená")
mu.Unlock()
}
Tento prístup je užitočný, keď je potrebná jemnejšia kontrola stavu a synchronizácie než len používanie kanálov.