【考研】操作系统——同步互斥问题(P、V操作)1

题目源于《操作系统原理》孟庆昌等编著。

可配合以下链接“食用”:

【考研】操作系统——同步互斥问题(P、V操作)2_住在阳光的心里的博客-CSDN博客

【考研复习】《操作系统原理》孟庆昌等编著课后习题+答案——第二章_住在阳光的心里的博客-CSDN博客

【考研】操作系统:2019年真题43(同步互斥问题)_住在阳光的心里的博客-CSDN博客_有n位哲学家围坐在一张圆桌边 

【考研】操作系统:2015年真题45(同步互斥问题)_住在阳光的心里的博客-CSDN博客_有ab两人通过信箱进行辩论

18.假定一个阅览室最多可容纳100人,读者进入和离开阅览室时都必须在阅览室门口的一张登记表上做标识(进入时登记,离开时去掉登记项),而且每次只允许一人登记或去掉登记。问:
① 应编写几个程序完成此项工作? 程序的主要动作是什么? 应设置几个进程? 进程与程序间的对应关系如何?
② 用P、V操作写出这些进程的同步通信关系。

解: ① 完成此项工作可编写一个或两个程序(函数),要求:
● 每个读者对应一个进程。
● 每个读者的动作包括:
        ■ 人室前查表、登记一一 register( )。
        ■ 进入室内,阅读书籍。
        ■ 出室时删除登记项一一 delete( )。
② 信号量:
● S一一座位情况, 初值为100。
● mutex一一互斥使用登记表, 初值为1。

// 第一种解法(一个函数):
每位读者进程:
    p(S);    // 判断是否有座位

    p(mutex);  //互斥访问登记表
    查表,登记;
    V(mutex);

    入室,阅读;

    p(mutex);   //互斥访问登记表
    出室查表,删除登记项;
    V(mutex);

    V(S);   //出室后座位加一


// 第二种解法(两个函数,用C语言描述):
typedef int semaphore;
semaphore s = 100;
semaphore mutex = 1;

void main() {
    register();
    reading();
    delete();
}

void register(){
    P(S);   //入室,座位减一

    P(mutex);
    Check_register();    //检查登记表
    V(mutex);
}

void delete()
{
    P(mutex);
    Check_delete();   //删除登记表
    V(mutex);

    v(S);   //出室,座位加一
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

住在阳光的心里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值