Все квизы
Жизненный цикл горутин
Проведи ревью конкурентного кода Go: дождись зарегистрированного воркера, освободи mutex на каждой итерации, передай отмену вложенному вызову и закрой общий канал после всех отправителей.
Код-ревью
runWorker должна закрыть finished только после того, как воркер получил сигнал start и завершился. start изначально открыт, а значение приходит позже. На проверке finished закрывается раньше отправки в start. Что исправить?
func runWorker(start <-chan struct{}, finished chan<- struct{}) {
var group sync.WaitGroup
go func() {
<-start
group.Add(1)
defer group.Done()
}()
group.Wait()
close(finished)
}