Sobes.tech
Junior — Middle

Обяснете принципа на работа на механизма за синхронизация на горутините в контекста на конкурентното изпълнение на задачи.

sobes.tech AI

Отговор от AI

В Go, горутините са леки нишки, които се изпълняват паралелно. За синхронизиране на горутините се използват механизми, които координират достъпа до споделени ресурси и организират изпълнението.

Основни механизми за синхронизация:

  • Канали (channels): позволяват пренос на данни между горутините и осигуряват синхронизация чрез обмен на съобщения.
  • Мютекси (sync.Mutex): блокират достъпа до споделени данни, за да се избегнат състезателни условия.
  • WaitGroup (sync.WaitGroup): позволява да се изчака завършването на група горутини.

Пример с канал:

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // чака данни от канала
    fmt.Println("Получена стойност:", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // изпраща данни към канала
}

Тук каналът осигурява синхронизация: горутината worker чака, докато main изпрати стойност.