关于Sync.Mutex的竞争问题

Chaoxin · · 1160 次点击
小兄弟注意哈,使用go关键字 以goroutine方式执行后面的代码,就不能根据父协程的代码顺序来看谁先执行了。所以 go produce(ch) go consumer(ch) 这两行代码不能说明produce先被执行。更离谱的是,CPU使用单核执行的前提下,大多数机子上可能先执行consumer。
#3
更多评论
个人理解不一定正确: produce在执行第五次的时候,ch已经执行mu.Lock(),此时ch已满,通道阻塞,但是mu.Unlocl没有释放锁,所以造成了持续阻塞。
#1
谢谢解答。不过我的疑惑是produce在通道未满的时候,也有释放锁。但是consumer永远竞争不到,produce一直占有
#2