Безопасно ли добавлять в группу ожидания из нескольких групп? - PullRequest
0 голосов
/ 13 декабря 2018

Если у меня есть несколько процедур одновременного добавления, добавление и вызов в группу ожидания.Это безопасно с точки зрения параллелизма?Большинство примеров групп ожидания, которые я видел, хранят добавление в одной подпрограмме go, которая вызывает / создает другие.

1 Ответ

0 голосов
/ 13 декабря 2018

Вызов Done из нескольких подпрограмм безопасен и является рекомендуемым использованием WaitGroup за документации .Причина вызова Add из goroutine, которая порождает больше подпрограмм, не в том, что Add не является поточно-ориентированным, а в том, что код может выглядеть так:

for ... {
    go func() {
        wg.Add(1)
        defer wg.Done()
        ...
    }()
}
wg.Wait()

Может попасть вwg.Wait() до того, как будет выполнен любой из вызовов Add, когда счетчик по-прежнему равен нулю, что наносит ущерб цели.Порядок выполнения параллельного кода недетерминирован.

...