2016-09-15 5 views
0

Я учусь Go. У меня есть цикл for с рекурсивными шагами, пока между неизвестным количеством элементов не обнаружено несколько вещей (неизвестное количество). Я хочу использовать go func(), чтобы иметь возможность ускорить поиск. Я использую chan и chan <-<-chan для наблюдения за рабочими. Однако я не знаю, как ждать выполнения задания и иметь возможность использовать найденные предметы.Параллельный шлюз с неизвестным количеством шагов

Спасибо!

+0

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

ответ

0

Здесь полезны группы ожидания.

Объявите переменную и добавить ожидания группы:

var wg sync.WaitGroup 

wg.Add(1) 

Перенести ожидание группы отделки внутри идут рутина и блок за его пределами:

go func(){ 
    //your function here. If you want a for loop with go routines put it outside the go routine 
    defer wg.Done() 
}() 

wg.Wait() 
0

Другой ответ правилен о sync.WaitGroup является инструмент для использования здесь. Цикл for IMHO неуместен, я думаю, что вы собираетесь обрабатывать элементы в цикле одновременно; как это:

func main() { 
    wg := &sync.WaitGroup{} 
    for item := range sourceOfUnknownQuantity { 
     wg.Add(1) 
     go process(item, wg) 
    } 
    wg.Wait() 
} 

func process(item int, wg *sync.WaitGroup) { 
    defer wg.Done() 
    // process item 
} 

var (
    sourceOfUnknownQuantity = make(chan int) 
) 

sourceOfUnknownQuantity Использование в цикле for только для демонстрации. Ваша реализация цикла может отличаться.

Смежные вопросы