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回答

ccmouse

2018-03-06

直接第三行ch2<-1就死锁了吧。channel一定要有人收,不然会等待。你这里可以开个goroutine来给ch2发送1,或者放到say之后。然后say函数前面要加go。最后main函数就不要收ch2了,只收ch1

1
1
唉_学习吧
非常感谢!豁然开朗
2018-03-07
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程