操作系统:PV操作习题分析
PV操作习题
有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工后并传送给P,P把加工后的信息打印输出。现有:
(1)一个缓冲区;
(2)两个缓冲区;
用PV操作写出这三个进程能正确工作的程序。
当只有一个缓冲区的时候
缓冲区是这样的一个过程:
Semaphore S1=1,S2=0,S3=0;
cobegin
void R(){
while(1){
[输入设备读入信息]
P(S1);
[把信息放入缓冲区中]
V(S2);
}
}
void M(){
while(1){
P(S2);
[从缓冲区中取出信息读入]
[加工数据信息并放入缓冲区]
V(S3);
}
}
void P(){
while(1){
P(S3);
[从缓冲区中读出数据]
V(S1);
[打印刚刚读出的数据]
}
}
当有两个缓冲区的时候
它将缓冲区这么使用:
Semaphore S1=1,S2=0,S3=1,S4=0;
//S1 表示R是否可以放资源到第一个缓冲区
//S2 表示M是否可以到第一个缓冲区取资源
//S3 表示M是否可以放资源到第二个缓冲区,一开始是可以放资源的,所以这里要设置成1
//S4 表示P是否可以从第二个缓冲区取资源
cobegin;
void P(){
while(1){
[read information form machine]
P(S1);
[input source in frist buffer]
V(S2);
}
}
void R(){
while(1){
P(S2);
P(S3);
[get source from frist buffer]
[input source in secound buffer]
V(S4);
V(S1); //此时R又可以读数据放到第一个缓冲区了
}
}
void P(){
while(1){
P(S4);
[get information from secound buffer]
V(S3);//此时第二个缓冲区又可以写资源进去了
}
}
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15046158.html