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