【发布时间】:2018-03-01 05:41:42
【问题描述】:
我在下面有一段运行 go 例程的 main 的代码摘录。为什么这不会发生:主进程在收到完成后和作业返回之前退出,这会使子进程变得僵尸。任何对 golang 文档的参考都会有所帮助。
func main() {
var jobDone = make(chan bool)
go job(jobDone)
<-jobDone
}
func job(done chan bool) {
for {
select {
case <-someOtherGlobalChannel:
//Please ignore this case/channel
fmt.Println("SOmeOtherChannel received")
default:
if check_somthing_expression {
done <- true
return
}
}
}
}
【问题讨论】:
-
<-done中的job将导致死锁,因为该通道没有发送者。 -
一方面,没有子进程。
-
@vedhavyas 是的,我同意。我的不好,我匆忙把我的代码总结成上面的代码。
标签: go concurrency