当通过另一个go例程发送了第二个值并且没有接收到第一个发送的值时,为什么通道c没有缓冲出去?
package main
import "fmt"
func sum(s []int, c chan int) {
sum := 0
for _, v := range s {
sum += v
}
c <- sum // send sum to c
}
func main() {
s := []int{7, 2, 8, -9, 4, 0}
c := make(chan int)
go sum(s[:len(s)/2], c)
go sum(s[len(s)/2:], c)
x, y := <-c ,<-c// receive from c
fmt.Println(x,y ,x+y)
}
我期待的是一个错误-
致命错误:所有goroutine都在睡着-死锁!
当缓冲区已满时有一个块时,就会发生这种情况。由于通道c的大小为1,因此发送第二个值应该会产生上述错误。
上面的代码中发生了什么?
幕布斯6054654
相关分类