操作系统题一

今有R,M,P三个进程,共享一个具有N个存储单元的循环缓冲区B ,R进程负责读入字符到缓冲B,M进程负责处理数据,如果输入字符为字符为空格,将他改为逗号,进程P负责将处理后的字符输出打印,进程输入打印一个字符后,又可以用来存放下一个数据。请用P V操作描述三个进程的同步

解:设置4个信号量
empty=N //可使用的缓冲区总数目
full1=0;//表示已输入字符个数
full2=0;//表示已经处理的字符个数
mutex=1;//用于表示进程互斥的信号量
char Buffer[N] //表示缓冲区
in=0;//表示指向下一个缓冲区
out1=0;//表示指向下一个待处理的字符
out2=0;//指向下一个待输出的字符

main(){
    R();
    M();
    P();
}
R(){
    while(true){
        char x;
        读入一个字符到x
        P(empty);
        P(mutex);
        Buffer[in]=x;
        in=(in+1)%N;
        V(mutex);
        V(full1);
    }
}
M(){
    while(true){
        char x;
        P(full1);
        P(mutex);
        x=Buffer[out1];
        if(x==" "){
            x=","
        }
        buffer[out1]=x;
        out1=(out1+1)/N;
        V(mutex);
        V(full2);
    }
}

P(){
    while(true){
        char x;
        P(full2);
        P(mutex);
        x=Buffer[out2];
        out2=(out2+1)%N;
        V(mutex);
        V(empty);
        print("%c",x)
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值