我從編程課程中給出的示例中摘錄了以下摘錄,我不確定為什么會發(fā)生死鎖。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 都處于睡眠狀態(tài) - 死鎖!goroutine 1 [chan 發(fā)送]: main.main()
- 1 回答
- 0 關(guān)注
- 155 瀏覽
添加回答
舉報
0/150
提交
取消