操作系统 关于生产者消费者的问题

发布网友 发布时间:2022-04-22 07:48

我来回答

2个回答

热心网友 时间:2023-08-26 16:01

empty是资源信号量,意思生产者、消费者都靠这个信号量来进行生产、消费。
为什么“生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品”?
其实可以转为问进程间为什么需要同步、互斥?您对这问题的研究不够请再看书。
这里我和您举个例子。
信号量的目的是管理生产者、消费者对公共资源(缓冲区)的访问
p原语对资源进行占有,V原语对资源进行释放
缺少empty资源信号量,那么只有互斥信号量。
但是empty和FUll需要成对出现,就算缺少signal(empty),那么消费者没对empty信号进行释放,产生的结果只会是下次生产者想进去生产东西但因为信号量缺失,进不去。
我也很想知道为什么“生产者进程向n个缓冲区投满产品后消费者进程才开始从中取产品”?

热心网友 时间:2023-08-26 16:01

消费者进程每次取产品时首先要wait(full)(full是指满的缓冲区的数目),成功取完之后要signal(empty)给空缓冲区的数目加一个1,生产者每次先wait(empty),产生完后sigal(full),若缺少siganl(empty),生产者会让empty 的数目会一直减少,直至empty的数目为0,即会表示n个缓冲区是满的,而此时的full信号量依然为初值a(假设a不为0)。此时只能执行消费进程。初值 empty=n-2 full=2
在这种情况下, 其变化 n-3 2
n-4 2
…… 2
0 2
此时只有消费者进程执行 0 1
0 0
lz感觉答案说的不是太清楚,给信号量empty 和 full 赋初值的不同很影响理解.

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com