Я работаю через электронную книгу и здесь я делаю этот код:
func f(n int) {
for i := 0; i < 10; i++ {
fmt.Println(n, ":", i)
amt := time.Duration(rand.Intn(250))
time.Sleep(time.Millisecond * amt)
}
}
func ConcurrMain() {
for i := 0; i < 10; i++ {
go f(i)
}
fmt.Println("hi")
}
Проблема в том, что я получаю разные значения с каждой командой запуска через goclipse
.Кажется, это работает лучше, когда я не выполняю команду сна.
В любом случае любое объяснение с пошаговым описанием, которое я думал, будет полезным в моем изучении параллелизма
Вот примермое возвращаемое значение со временем сна:
4 : 0
1 : 0
6 : 0
0 : 0
5 : 0
7 : 0
8 : 0
2 : 0
3 : 0
9 : 0
9 : 1
hi
Затем я запускаю его снова и теперь получаю со временем сна:
0 : 0
hi
1 : 0
А теперь в третий раз, и я получаю со временем сна:
0 : 0
hi
И на этот раз без сна я получаю:
1 : 0
1 : 1
1 : 2
1 : 3
1 : 4
1 : 5
1 : 6
1 : 7
1 : 8
3 : 0
3 : 1
4 : 0
4 : 1
4 : 2
9 : 0
6 : 0
6 : 1
6 : 2
2 : 0
2 : 1
2 : 2
2 : 3
2 : 4
2 : 5
2 : 6
2 : 7
2 : 8
2 : 9
7 : 0
7 : 1
7 : 2
7 : 3
7 : 4
7 : 5
7 : 6
5 : 0
5 : 1
5 : 2
5 : 3
5 : 4
5 : 5
5 : 6
5 : 7
5 : 8
5 : 9
9 : 1
1 : 9
8 : 0
3 : 2
hi
Я использую goclipse под окнами на случай, если информация уместна
ОБНОВЛЕНИЕ
Следует отметить, что этот вызов вызывается из основного пакета как:
func main()
{
lab.ConcurrMain()
}
ОБНОВЛЕНИЕ2
Я добавил: var wg sync.WaitGroup outside the func scope. I also added
wg.Add (1) inside the
ConcurrMain method just prior to
go f (i) , then i also added
wg.Wait () just after the
forloop, который выполняет функцию go and then finally
wg.Done () inside the
f () `метод ** и это, кажется, работает, но этот ответ не был в электронной книге, поэтому я хочу понять.