关于Sync.Mutex的竞争问题

Chaoxin · · 1192 次点击
刚运行了一下,原因是正如3楼所说的,consumer(ch)早于produce(ch)先执行, consumer(ch)上来先拿到mu.Lock然后立马阻塞在了v:=<-ch, 而produce(ch)执行的时候一直拿不到mu.Lock,所以导致produce(ch)无法生产, consumer(ch)干等着没什么可消费的。你把go consumer(ch) go produce(ch)顺序换一下就不一样了
#4
更多评论
个人理解不一定正确: produce在执行第五次的时候,ch已经执行mu.Lock(),此时ch已满,通道阻塞,但是mu.Unlocl没有释放锁,所以造成了持续阻塞。
#1
谢谢解答。不过我的疑惑是produce在通道未满的时候,也有释放锁。但是consumer永远竞争不到,produce一直占有
#2