锁的竞争和唤醒疑问

锁的竞争和唤醒疑问

https://img1.sycdn.imooc.com//climg/636a239d0923e86218420778.jpg

https://img1.sycdn.imooc.com//climg/636a23cc0937cde917990538.jpg

https://img1.sycdn.imooc.com//climg/636a24080962979c18330479.jpg

消费的时候会看number是否大于0 如果等于0会解锁然后等待

生产的时候如果生产好了会唤醒前面阻塞的消费者线程

逻辑ok,但是有个疑问 图2中的2个方括号的位置,消费的时候会先lock然后

看number=0 就等待,同时解锁了,如果线程被唤醒后,代码还是从这里开始运行

那这个锁不是一直是开着的么,lock的锁定逻辑在wait上面,那竞争锁的逻辑在哪?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
无__名 2022-11-09 17:16:23

这个线程解锁了 ,生产者与消费线程都会竞争这个锁,锁定是pthread_cond_wait里面,获得到锁才会返回,所以并不需要我们在获得锁,如果获得锁之后,发现条件不满足了,那就只能重新进入睡眠

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师