在生产者和消费者条件变量中互斥锁的使用

来源:7-5 线程同步之条件变量

慕无忌1403862

2019-08-13


http://img1.sycdn.imooc.com/szimg/5d52cfa608a1d4d706400360.jpg
如上图老师的代码所示,若是缓冲区空了,就会显示等待生产者生产,然后并没有解锁。这种情况下生产者是怎么能往这个锁了的缓冲区中增加数字的呢?
我的理解是只有num +=1或者 -=1的时候才会解锁?
求指教,谢谢

写回答

1回答

咚咚呛

2019-08-14

这里,互斥锁是作为变量传递到条件变量的操作里面去,而实际上在条件变量相关函数里面的操作里是会将锁释放的,他的具体操作是,把当前线程放到等待条件的队列里面去,然后对互斥量解锁。

而在这个wait函数返回的时候,互斥量会再次锁住,所以才有后面的解锁。

这里的细节是非常值得深究的,同学能思考到这里,也是非常棒的。

而关于条件变量的一些细节,老师最近也在整理一些常见问题,预计后续会开放给大家。

2
0

(新版)计算机基础,计算机组成原理+操作系统+网络

编程之前先学这门课,系统补足计算机基础知识,夯实编程地基

7739 学习 · 1580 问题

查看课程