Go程序陷入僵局

Go程序陷入僵局,第1张

Go程序陷入僵局

问题是您要将传递

sync.WaitGroup
给goroutines 的副本,而不是引用(即指针):

package mainimport (    "fmt"    "sync")var wg sync.WaitGroupfunc 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
是全局变量,您可以完全删除该参数:

package mainimport (    "fmt"    "sync")var wg sync.WaitGroupfunc 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()}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5170783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存