操作系统考研题【PV操作】

本文详细解析了在操作系统环境下,两个进程A和B通过共享邮箱进行辩论的同步问题。通过设置信号量和P、V操作,确保了进程间的正确通信,避免了死锁和资源竞争。介绍了信号量的含义及初值设定,展示了如何使用信号量实现进程间的同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作系统第七周[第四次作业]【王清江】

有A、B两人通过信箱进行辩论,每人都从自己的信箱中取得对方的问题。将答案和向对方提出的新问题组成一个邮件放入对方的邮箱中,设A的信箱最多放M个邮件,B的信箱最多放 N个邮件。初始时A的信箱中有x个邮件(0<x<M) ,B信箱中有y个(0<y<N)。辩论者每取出一个邮件,邮件数减1。

A、B两人操作过程:
A()
{
While(TRUE){
从A的信箱中取出一个邮件;
回答问题并提出一个新问题;
将新邮件放入B的信箱;
}
}

B( ){
While(TRUE){
从B的信箱中取出一个邮件;
回答问题并提出一个新问题;
将新邮件放入A的信箱;
}
}

当信箱不为空时,辩论者才能从信箱中取邮件,否则等待。
当信箱不满时,辩论者才能将新邮件放入信箱,否则等待。
请添加必要的信号量和P、V(或wait, signed)操作,以实现上述过程的同步,要求写出完整过程,并说明信号量的含义和初值。

解【请换一个符号,不要命名一模一样】:

semaphore mutex_A=1; //A邮箱互斥访问
semaphore mutex_B=1; //B邮箱互斥访问
semaphore empty_A=M - x; //表示A邮箱空闲的可以放邮件的位置,大于零,小于M
semaphore empty_B=N - y; //表示B邮箱空闲的可以放邮件的位置,大于零,小于N
semaphore full_A=x; //表示A邮箱中剩余的邮件数量
semaphore full_B=y; //表示B邮箱中剩余的邮件数量

void 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);
}
}

void B(){
while(TRUE){
P(full_B);
P(mutex_B);
从B中拿出一个邮件进行操作;
V(mutex_B);
V(empty_B);

回答问题并且造一个新的邮件;

P(empty_A);
P(mutex_A);
发邮件给A的邮箱;
V(mutex_A);
V(full_A);
}
}

void main(){ //主线程

cobegin

A();

B();

coend

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值