Junior — Middle
Դուք արդյոք օգտագործել եք sync.Cond-ի միջոցով սինխրոնիզացիայի մեխանիզմ ձեր նախագծերում?
sobes.tech AI
Պատասխան AI-ից
Go նախագծերում ես օգտագործել եմ sync.Cond-ը՝ գորուտինների միջև սպասելու և ծանուցելու կազմակերպման համար, երբ անհրաժեշտ էր պայմանական սինխրոնիզացիա իրականացնել։ Օրինակ, երբ մեկ գորուտին պետք է սպասի, մինչև մյուսը կատարի որոշակի գործողություն կամ փոխի վիճակը։
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() // ծանուցում սպասող գորուտինին
mu.Unlock()
}()
mu.Lock()
for !ready {
cond.Wait() // սպասում նշանին
}
fmt.Println("Գորուտին պատրաստ է")
mu.Unlock()
}
Այս մոտեցումը օգտակար է, երբ անհրաժեշտ է ավելի նուրբ վերահսկողություն վիճակի և սինխրոնիզացիայի վրա, քան պարզապես ալիքների օգտագործումը։