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() // чакаме и двете да приключат
Това е полезно за координиране на паралелни операции и предотвратяване на преждевременното приключване на програмата.