1 回答

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
問題是您將副本傳遞sync.WaitGroup給 goroutine,而不是引用(即指針):
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
numOfGoRoutines := 10
wg.Add(numOfGoRoutines)
ch := make(chan int, numOfGoRoutines)
for i := 0; i < numOfGoRoutines; i++ {
a := i
go sqr(ch, a, &wg)
}
wg.Wait()
fmt.Println("After WAIT")
close(ch)
var res int
for i := range ch {
res += i
}
ch = nil
fmt.Println("result = ", res)
}
func sqr(ch chan int, val int, wg *sync.WaitGroup) {
fmt.Println("go - ", val)
s := val * val
ch <- s
wg.Done()
}
此外,由于wg是一個(gè)全局變量,您可以完全刪除該參數(shù):
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
numOfGoRoutines := 10
wg.Add(numOfGoRoutines)
ch := make(chan int, numOfGoRoutines)
for i := 0; i < numOfGoRoutines; i++ {
a := i
go sqr(ch, a)
}
wg.Wait()
fmt.Println("After WAIT")
close(ch)
var res int
for i := range ch {
res += i
}
ch = nil
fmt.Println("result = ", res)
}
func sqr(ch chan int, val int) {
fmt.Println("go - ", val)
s := val * val
ch <- s
wg.Done()
}
- 1 回答
- 0 關(guān)注
- 205 瀏覽
添加回答
舉報(bào)