ch2有数据流入,在main函数中ch1和ch2都释放过数据,但是还是会死锁。麻烦老师解答一下
来源:11-1 channel

唉_学习吧
2018-03-06
package main
import (
"fmt"
)
func say(s string, ch1 chan int, ch2 chan int) {
fmt.Println(s)
ch1 <- <- ch2 // ch1在等着ch2中的数据流入
}
// 信道可以阻塞当前的goroutine
func main() {
ch1 := make(chan int)
ch2 := make(chan int)
ch2 <- 1
say("hello world!!", ch1, ch2)
<-ch2
<-ch1 // main的信道在等着ch1的数据释放
}
写回答
1回答
-
直接第三行ch2<-1就死锁了吧。channel一定要有人收,不然会等待。你这里可以开个goroutine来给ch2发送1,或者放到say之后。然后say函数前面要加go。最后main函数就不要收ch2了,只收ch1
112018-03-07
相似问题