24小时热门版块排行榜    

查看: 2122  |  回复: 25
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

X_huu

金虫 (小有名气)

[交流] 互斥量mutex的使用问题

书上说:在生产者——消费者问题中,用互斥量mutex的值0和1表示缓存区是否加锁,函数down(&mutex)使mutex值减1,up(&mutex)使mutex增1。

那么如图中代码,为什么这段生产者和消费者的代码都是执行down操作然后再执行up呢?这意思岂不是说:进入临界区后不加锁,执行完以后再加锁,这样的话岂不是该进程运行时其他进程都可以进入临界区了?

不应该是反过来:进入临界区以后执行up加锁,退出的时候执行down解锁吗?

求请大神指教!!

互斥量mutex的使用问题
360桌面截图20161127113604.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

0602114042

银虫 (小有名气)


小木虫: 金币+0.5, 给个红包,谢谢回帖
mutex这个是临界区插入取出的锁,每次操作前后都申请锁和释放锁了,没问题
至于empty和full是两个资源,所以不用上面的mutex去锁

每个角色读写empty和full时不冲突,举例子极端情况下消费者up一个empty后,
生产者立马down一个empty或者在消费者之前down
虽然不是原子操作,会涉及到一个变量读写,
但是想想,
如果empty是up状态的话,无非生产者down就行了
如果empty是down状态的话,无非生产者继续等待消费者up后再down就行了
这里应该是while反复尝试,不成功就continue(感觉代码是伪代码,少了这一点,可能会死锁)
23楼2016-11-29 22:49:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 26 个回答

sony8620

铁杆木虫 (文学泰斗)


X_huu(金币+1): 谢谢参与
7楼2016-11-27 12:18:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

X_huu(金币+1): 谢谢参与
12楼2016-11-27 12:38:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见