Middle+
Ի՞նչ սինխրոնիզացիայի primitives կան Go-ում goroutine-ների համար։
sobes.tech AI
Պատասխան AI-ից
Go լեզվում, գորուտինների սինխրոնիզացման համար օգտագործվում են հետևյալ հիմնական նախապատրաստական միջոցները՝
- Mutex (sync.Mutex) — ապահովում է փոխադարձ բացառություն՝ արգելելով բաժանվող ռեսուրսների մուտքը:
- RWMutex (sync.RWMutex) — Mutex-ի ընդլայնում, որը թույլ է տալիս միաժամանակ մի քանի գորուտինների ընթերցում, բայց արգելում գրառումը:
- WaitGroup (sync.WaitGroup) — թույլ է տալիս սպասել գորուտինների խմբի ավարտին:
- Channel (chan) — տվյալների փոխանցման ալիք գորուտինների միջև, ապահովում է սինխրոնիզացիա հաղորդագրությունների փոխանցման միջոցով:
- Once (sync.Once) — երաշխավորում, որ որոշակի ֆունկցիա կիրականացվի միայն մեկ անգամ:
- Cond (sync.Cond) — պայմանական փոփոխական՝ ավելի բարդ սինխրոնիզացիայի համար, օրինակ՝ սպասել որոշակի վիճակի:
Օրինակ՝ WaitGroup և 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)
}