我从编程课程中给出的示例中摘录了以下摘录,我不确定为什么会发生死锁。package mainimport ( "fmt")var ( Count int = 0 nFunctions int = 2)var sema = make(chan int)func increment(ch chan int, nSteps int) { for i := 0; i < nSteps; i++ { <- sema cnt := Count Count = cnt + 1 ch <- 1 sema <- 1 } return}func main() { ch := make(chan int) sema <- 1 go increment(ch, 1000) go increment(ch, 1000) for i := 0; i < nFunctions*1000; i++ { <-ch } fmt.Printf("Count = %d\n", Count)}奇怪的是,当我将语句从主要更改sema <- 1为go func () {sema <- 1}()对此的任何解释都非常感谢。错误消息是:致命错误:所有 goroutine 都处于睡眠状态 - 死锁!goroutine 1 [chan 发送]: main.main()
- 1 回答
- 0 关注
- 175 浏览
添加回答
举报
0/150
提交
取消
