Sobes.tech
Junior — Middle

Използвали ли сте механизма за синхронизация с помощта на sync.WaitGroup в проектите си?

sobes.tech AI

Отговор от AI

Да, в проектите на Go често се използва sync.WaitGroup за синхронизиране на горутините. Този механизъм позволява да се изчака завършването на група паралелни задачи преди да продължите.

Принцип на работа:

  • Създава се обект WaitGroup.
  • Преди да стартирате всяка горутина, се извиква Add(1), за да се увеличи броячът.
  • Вътре в горутината, след като работата приключи, се извиква Done(), което намалява брояча.
  • Основната горутина извиква Wait(), която блокира, докато броячът не стане нула.

Пример:

var wg sync.WaitGroup

wg.Add(2) // очакваме 2 горутини

go func() {
    defer wg.Done()
    // работа на първата горутина
}()

go func() {
    defer wg.Done()
    // работа на втората горутина
}()

wg.Wait() // чакаме и двете да приключат

Това е полезно за координиране на паралелни операции и предотвратяване на преждевременното приключване на програмата.