首页 习题正文

45.(9分)有A、B两人通过信箱进行辩论,每个人都从自口的

45.(9分)有A、B两人通过信箱进行辩论,每个人都从自口的信箱中取得对方的问题,将答案和向对方提出的新问题组成一个邮件放人对方的信箱中。假设A的信箱最多放M个邮件,B的信箱最多放Ⅳ个邮件。初始时A的信箱中有x个邮件(0CoBegin A{ while(TRUE){ 从A的信箱中取出一个邮件; 回答问题并提出一个新问题; 将新邮件放人B的信箱; } }
B、{ while(TRUE){ 从 B的信箱中取出一个邮件; 回答问题并提出一个新问题; 将新邮件放人A 的信箱; } } CoEnd 当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。请添加必要的信号量和P、V(或wait、signal)操作,以实现上述过程的同步。要求写出完整的过程,并说明信号量的含义和初值。



【参考答案及解析】
semaphore Full_A =x;//Full A表示A的信箱中的邮件数量 semaphore Empty_A = M-x;//Empty_A表示A的信箱中还可存放的邮件数量semaphore FullB = y;//FullB表示B的信箱中的邮件数量 semaphore Empty_B = N-y;//Empty_B表示B的信箱中还可存放的邮件数量semaphore mutex_A = 1;//mutex_A用于A的信箱互斥 semaphore mutex_B = 1;//mutex_B用于B 的信箱互斥 CoBegin A{ while(TRUE){ P(Full A); P(mutex_A); 从A的信箱中取出一个邮件; V(mutex_A); V(Empty_A); 回答问题并提出一个新问题; P(Empty_B); P(mutex_B); 将新邮件放入B的信箱; V(mutex_B); V(Full_B ); } } B{ while(TRUE){ P(FulLB); P(mutex_B); 从B的信箱中取出一个邮件; V(mutex_B); V(Empty_B); 回答问题并提出一个新问题; P(Empty_A); P(mutex_A); 将新邮件放入A 的信箱; V(mtex_A); V(Full_A); } } CoEnd 【评分说明】 ①每对信号量的定义及初值正确,给分。 ②每个互斥信号量的P、V操作使用正确,各给分。 ③每个同步信号量的 P、V操作使用正确,各给分。 ④其他答案酌情给分。

正在整理中,欢迎在文下评论区提供答案解析,谢谢!
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接:https://scpro.cn/v/9116fe34c0f04594.html