关于Sync.Mutex的竞争问题

Chaoxin · 2020-09-15 08:49:07 · 1379 次点击

小兄弟注意哈,使用go关键字 以goroutine方式执行后面的代码,就不能根据父协程的代码顺序来看谁先执行了。所以 go produce(ch) go consumer(ch) 这两行代码不能说明produce先被执行。更离谱的是,CPU使用单核执行的前提下,大多数机子上可能先执行consumer。

#3
更多评论

个人理解不一定正确: produce在执行第五次的时候,ch已经执行mu.Lock(),此时ch已满,通道阻塞,但是mu.Unlocl没有释放锁,所以造成了持续阻塞。

#1

谢谢解答。不过我的疑惑是produce在通道未满的时候,也有释放锁。但是consumer永远竞争不到,produce一直占有

#2