Sobes.tech
Junior — Middle

Cum se poate organiza și gestiona secvența de execuție a firelor?

sobes.tech AI

Răspuns de la AI

În Go, pentru organizarea și gestionarea secvenței de execuție a goroutine-urilor, se utilizează mai multe mecanisme principale:

  1. Canale (channels) — permit sincronizarea goroutine-urilor, transmitând date între ele. O goroutine care citește dintr-un canal va aștepta până când o altă goroutine trimite date, asigurând ordinea.

  2. sync.WaitGroup — este folosit pentru a aștepta finalizarea unui grup de goroutine-uri. Permite să aștepți până când toate goroutine-urile lansate se termină.

  3. Mutex și alte primitive din pachetul sync — pentru protejarea resurselor comune și prevenirea condițiilor de cursă.

Exemplu de utilizare a canalelor pentru execuție secvențială:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Worker %d a început\n", id)
    // simulare de muncă
    done <- true // semnal de finalizare
}

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

    go worker(1, done)
    <-done // așteptăm finalizarea worker-ului 1

    go worker(2, done)
    <-done // așteptăm finalizarea worker-ului 2

    fmt.Println("Toți worker-ii au terminat")
}

Astfel, folosind canale și sincronizare, se poate controla ordinea de execuție a goroutine-urilor.