请教一个goroutines问题

下面代码片段,为什么执行到counter3000多,就不执行了。另外如果去掉fmt.Println("counterinmain:",counter)的注释,就可以执行完毕。这是为什么啊?
09-02update:是在main()中第二个for循环卡死了,就是感觉goroutines没有执行完或者没有按预期执行(预期最后counter值会为9000)。但是去掉注释就不会卡死。另外今天在公司电脑,这个偶尔会卡死,偶尔又不会卡死,不知道为什么。
packagemain
import(
"fmt"
"sync"
)
varcounterint=0
funcCount(iint,lock*sync.Mutex){
lock.Lock()
fmt.Println("BeforeCount()",i,counter)
counter++
fmt.Println("AfterCount()",i,counter)
lock.Unlock()
}
funcmain(){
lock:=&sync.Mutex{}
fori:=0;i<9000;i++{
goCount(i,lock)
}
for{
//fmt.Println("counterinmain:",counter)
ifcounter>=9000{
break
}
}
}
紫衣仙女
浏览 341回答 2
2回答

慕尼黑的夜晚无繁华

试着跑了一遍,在main中第二个for循环中卡死了,而且之前的goroutine也没有开始执行。换成sleep就能跑,并且没有遇到题主说的问题。求大神解释。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript