Sobes.tech
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()
}

Այս մոտեցումը օգտակար է, երբ անհրաժեշտ է ավելի նուրբ վերահսկողություն վիճակի և սինխրոնիզացիայի վրա, քան պարզապես ալիքների օգտագործումը։