Junior — Middle
Wyjaśnij zasadę działania mechanizmu synchronizacji goroutines w kontekście równoczesnego wykonywania zadań.
sobes.tech AI
Odpowiedź od AI
W języku Go goroutines to lekkie wątki, które są wykonywane równocześnie. Do synchronizacji goroutines używa się mechanizmów umożliwiających koordynację dostępu do wspólnych zasobów i uporządkowanie wykonania.
Główne mechanizmy synchronizacji:
- Kanały (channels): umożliwiają przesyłanie danych między goroutines, zapewniając synchronizację poprzez wymianę wiadomości.
- Muteksy (sync.Mutex): blokują dostęp do współdzielonych danych, aby zapobiec wyścigom.
- WaitGroup (sync.WaitGroup): pozwala czekać na zakończenie grupy goroutines.
Przykład z kanałem:
package main
import (
"fmt"
)
func worker(ch chan int) {
val := <-ch // oczekuje na dane z kanału
fmt.Println("Odebrana wartość:", val)
}
func main() {
ch := make(chan int)
go worker(ch)
ch <- 42 // wysyła dane do kanału
}
Tutaj kanał zapewnia synchronizację: goroutine worker czeka, aż main wyśle wartość.