package hw05_parallel_execution //nolint:golint,stylecheck import ( "sync" ) // Функция, решающая задачу методом пилообразного сдвига. func RunSawShift(tasks []Task, n int, m int) error { errs := Errors{} for i := 0; i < len(tasks); i += n { wg := sync.WaitGroup{} for g := 1; g <= n && i+g < len(tasks); g++ { wg.Add(1) go func(rt Task, errs *Errors) { defer wg.Done() err := rt() if err != nil { errs.mx.Lock() errs.count++ errs.mx.Unlock() } }(tasks[i+g], &errs) } wg.Wait() if m > 0 && errs.count > m { return ErrErrorsLimitExceeded } } return nil }