Sobes.tech
Junior — Middle

Cum se realizează schimbul de semnale prin canale în sistemul de programare?

sobes.tech AI

Răspuns de la AI

În limbajul Go (Golang), canalele (channels) sunt utilizate pentru schimbul de semnale și date între goroutines, asigurând sincronizarea și comunicarea.

Un canal este un conduct tipizat, prin care se pot trimite și primi valori. Trimiterea și primirea pe un canal blochează goroutine-ul până când cealaltă parte este gata să accepte sau să trimită date, ceea ce permite sincronizarea eficientă a execuției.

Exemplu de schimb de semnale folosind un canal:

package main

import (
    "fmt"
    "time"
)

func worker(done chan bool) {
    fmt.Println("Lucrul a început")
    time.Sleep(time.Second) // simulare de lucru
    fmt.Println("Lucrul s-a încheiat")
    done <- true // trimitem semnalul de finalizare
}

func main() {
    done := make(chan bool)
    go worker(done) // pornim goroutine-ul
    <-done           // așteptăm semnalul de finalizare
    fmt.Println("Funcția principală s-a încheiat")
}

În acest exemplu, canalul done este folosit pentru a transmite semnalul de finalizare al goroutine-ului worker. Funcția principală se blochează la citirea din canal până primește semnalul, ceea ce permite sincronizarea corectă a execuției.