Sobes.tech
Junior — Middle

Kako organizovati i upravljati redosled izvršavanja niti?

sobes.tech АИ

Одговор од АИ

U Go jeziku, za organizaciju i upravljanje redosledom izvršavanja gorutina koriste se nekoliko osnovnih mehanizama:

  1. Kanali (channels) — omogućavaju sinhronizaciju gorutina, prenoseći podatke između njih. Gorutina koja čita iz kanala će čekati dok druga gorutina ne pošalje podatke, čime se obezbeđuje redosled.

  2. sync.WaitGroup — koristi se za čekanje završetka grupe gorutina. Omogućava da se sačeka dok sve pokrenute gorutine ne završe.

  3. Mutex i drugi primitivni iz paketa sync — za zaštitu zajedničkih resursa i sprečavanje trka.

Primer korišćenja kanala za sekvencijalno izvršavanje:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Radnik %d je počeo\n", id)
    // simulacija rada
    done <- true // signal o završetku
}

func main() {
    done := make(chan bool)

    go worker(1, done)
    <-done // čekamo završetak radnika 1

    go worker(2, done)
    <-done // čekamo završetak radnika 2

    fmt.Println("Svi radnici su završili")
}

Na ovaj način, koristeći kanale i sinhronizaciju, može se upravljati redosledom izvršavanja gorutina.