У меня есть следующая выдержка из примера, приведенного в курсе программирования, и я не уверен, почему возникает тупик.
package main
import (
"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
}()
Любые объяснения этому очень ценятся. Сообщение об ошибке: фатальная ошибка: все программы находятся в спящем режиме - тупик!
программа 1 [chan send]: main.main ()