Go 中的死锁,两个例程分工

我在 go 中遇到了一个死锁问题。


该程序采用一个整数数组 a,并将其一分为二。然后它将这两个部分放在两个不同的例程中并总结所有元素。在此之后,它应该在通道 res 中发送两个结果。然后应该将两个 res(现在是 ch)相加并打印。


我的问题:我试图通过大量移动关闭函数来解决死锁问题,但似乎没有任何帮助。它仅在一个例程 Add 运行时运行良好。


package main


import (

    "fmt"

)


// Add adds the numbers in a and sends the result on res.

func Add(a []int, res chan<- int) {

    sum := 0

    for i := range a {

        sum = sum + a[i]

    }

    res <- sum

}


func main() {

    a := []int{1, 2, 3, 4, 5, 6, 7}


    n := len(a)

    ch := make(chan int)

    go Add(a[:n/2], ch)

    go Add(a[n/2:], ch)



    sum := 0

    for s := range ch {

        sum = sum + s

    }

    //close(ch)


    fmt.Println(sum)

}


慕田峪4524236
浏览 171回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go