Sobes.tech
Junior — Middle

Jak lze uspořádat a řízení sekvence provádění vláken?

sobes.tech AI

Odpověď od AI

V jazyce Go se pro organizaci a řízení sekvence provádění gorutin používá několik hlavních mechanismů:

  1. Kanály (channels) — umožňují synchronizaci gorutin, přenášením dat mezi nimi. Gorutina, která čte z kanálu, bude čekat, dokud jiná gorutina nepošle data, což zajišťuje pořadí.

  2. sync.WaitGroup — slouží k čekání na dokončení skupiny gorutin. Umožňuje počkat, až všechny spuštěné gorutiny dokončí.

  3. Mutex a další primitivy z balíčku sync — pro ochranu sdílených zdrojů a prevenci závodů.

Příklad použití kanálů pro sekvenční provádění:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Pracovník %d začal\n", id)
    // simulace práce
    done <- true // signál o dokončení
}

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

    go worker(1, done)
    <-done // čekáme na dokončení pracovníka 1

    go worker(2, done)
    <-done // čekáme na dokončení pracovníka 2

    fmt.Println("Všichni pracovníci dokončili")
}

Tímto způsobem lze pomocí kanálů a synchronizace řídit pořadí provádění gorutin.