条件变量

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

weixin_慕雪2209780

2019-08-06

老师,这个唤醒信号和释放互斥锁的顺序有没有要求啊,有没有啥区别?
先发送信号唤醒线程然后释放锁
还有先唤醒线程再解锁?

还有,这个例子中老师你是先加锁再判断条件是否睡眠,

是不是睡眠了就离开这个临界区了?就相当于解锁状态,其他线程(比如消费者)可以访问这个临界区了?
如果这样满足条件执行了操作后唤醒再解锁是个什么顺序?
不是离开了临界区了还没唤醒呢怎么就可以对临界区操作了?

如果睡眠了没有离开临界区,那么消费者怎么访问的临界区?他不访问,这个临界区不就永远是满的了吗?那不就是死锁了吗?
这节课疑惑很多,希望老师指点一下

写回答

2回答

咚咚呛

2019-08-14

这里先说明一下条件变量wait操作的相关内容。

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

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


2
0

咚咚呛

2019-08-08

这个问题很好,我找个时间详细回答,这里先mark一下。

1
1
weixin_慕雪2209780
好的,
2019-08-08
共1条回复

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

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

7739 学习 · 1580 问题

查看课程