Sobes.tech
Junior — Middle

Paaiškinkite goroutine'ų sinchronizacijos mechanizmo veikimo principą konkurencinio užduočių vykdymo kontekste.

sobes.tech AI

Atsakymas iš AI

Go kalboje gorutinos yra lengvi srautai, kurie vykdomi lygiagrečiai. Gorutinos sinchronizacijai naudojami mechanizmai, kurie koordinuoja prieigą prie bendrų išteklių ir tvarko vykdymo tvarką.

Pagrindiniai sinchronizacijos mechanizmai:

  • Kanalai (channels): leidžia perduoti duomenis tarp gorutinų ir užtikrina sinchronizaciją per žinučių mainus.
  • Mutex'ai (sync.Mutex): blokuoja prieigą prie bendrų duomenų, siekiant išvengti lenktynių sąlygų.
  • WaitGroup (sync.WaitGroup): leidžia laukti, kol baigsis grupė gorutinų.

Pavyzdys su kanalu:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // laukia duomenų iš kanalo
    fmt.Println("Gauta reikšmė:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // siunčia duomenis į kanalą
}

Čia kanalas užtikrina sinchronizaciją: worker gorutina laukia, kol pagrindinė funkcija išsiųs reikšmę.