在生产者和消费者条件变量中互斥锁的使用
来源:7-5 线程同步之条件变量

慕无忌1403862
2019-08-13
如上图老师的代码所示,若是缓冲区空了,就会显示等待生产者生产,然后并没有解锁。这种情况下生产者是怎么能往这个锁了的缓冲区中增加数字的呢?
我的理解是只有num +=1或者 -=1的时候才会解锁?
求指教,谢谢
写回答
1回答
-
这里,互斥锁是作为变量传递到条件变量的操作里面去,而实际上在条件变量相关函数里面的操作里是会将锁释放的,他的具体操作是,把当前线程放到等待条件的队列里面去,然后对互斥量解锁。
而在这个wait函数返回的时候,互斥量会再次锁住,所以才有后面的解锁。
这里的细节是非常值得深究的,同学能思考到这里,也是非常棒的。
而关于条件变量的一些细节,老师最近也在整理一些常见问题,预计后续会开放给大家。
20
相似问题