Sobes.tech
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ść.