Sobes.tech
Junior — Middle

Selgitage goroutine'ide sünkronsüsteemi mehhanismi tööpõhimõtet konkurentsivõimelise ülesannete täitmise kontekstis.

sobes.tech AI

Vastus AI-lt

Go keeles on kergekaalulised goroutinid, mis töötavad samaaegselt. Goroutinide sünkroniseerimiseks kasutatakse mehhanisme, mis koordineerivad juurdepääsu jagatud ressurssidele ja korraldavad täitmise järjekorda.

Peamised sünkroniseerimismehhanismid:

  • Kanalid (channels): võimaldavad andmete edastamist goroutinide vahel ning tagavad sünkroniseerimise sõnumite vahetamise kaudu.
  • Mutexid (sync.Mutex): blokeerivad juurdepääsu jagatud andmetele, et vältida võistlusolukordi.
  • WaitGroup (sync.WaitGroup): võimaldab oodata, kuni goroutinide grupp lõpetab.

Näide kanali kasutamisest:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // ootab andmeid kanalilt
    fmt.Println("Saadud väärtus:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // saadab andmed kanalile
}

Siin tagab kanal sünkroniseerimise: worker goroutine ootab, kuni main saadab väärtuse.