Sobes.tech
Junior — Middle

გთხოვთ, ახსნათ goroutine-ების სინქრონიზაციის მექანიზმის მუშაობის პრინციპი კონკურენტული დავალებების შესრულების კონტექსტში.

sobes.tech AI

პასუხი AI-სგან

Go լեզվում, goroutine-ները թեթև քարշակներ են, որոնք կատարվում են համաժամանակ։ Goroutine-ների սինխրոնիզացիան ապահովելու համար օգտագործվում են մեխանիզմներ, որոնք համատեղում են ընդհանուր ռեսուրսների մուտքը և կարգավորում են կատարման հերթականությունը:

Հիմնական սինխրոնիզացիայի մեխանիզմներ՝

  • Չանաներ (channels): թույլ են տալիս տվյալների փոխանցում goroutine-ների միջև, ապահովելով սինխրոնիզացիա հաղորդագրությունների փոխանակման միջոցով:
  • Mutex-ներ (sync.Mutex): արգելափակում են ընդհանուր տվյալների մուտքը՝ կանխելու մրցակցության պայմանները:
  • WaitGroup (sync.WaitGroup): թույլ է տալիս սպասել մի խմբի goroutine-ների ավարտին:

Օրինակ՝ չանայի հետ:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // սպասում է տվյալների չանայից
    fmt.Println("Ստացված արժեքը:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // ուղարկում է տվյալները չանային
}

Այստեղ չանան ապահովում է սինխրոնիզացիան՝ worker goroutine-ը սպասում է, մինչև main-ը ուղարկի արժեքը։