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

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

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

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

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

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

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

 19. 在一个飞机订票系统中,多个用户共享一个数据库。各用户可以同时查询信息,若有一个用户要订票、需更新数据库时,其余所有用户都不可以访问数据库。请用P、V操作设计一个同步算法,实现用户查询与订票功能。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者到来而使其长时间等待。利用信号量机制保证其正常执行。

 解:本题是典型的读者一写者问题。查询信息的用户是读者,订票用户是写者,并且要求写者优先
【解法1】 读者-写者按先后顺序交叉访问数据库,如图B-5所示。
信号量:
● Sw——控制订票者进程的活动,初值为1。
● Src——互斥使用rc变量,初值为1。
● S——当订票者到达时封锁后续的读进程,初值为1。

计数变量:
rc——正在运行的查询者进程数目,初值为0。

【解法2】保证写者优先于读者,即一旦有写者到达时,则新读者要等待。
信号量:
● rmutex——当至少有一个写者到达时,阻止所有读者访问的互斥操作信号量,初值为1。
● wmutex——写者间以及读者与写者间互斥操作信号量,初值为1。
● x——控制 readcount 变量修改的互斥信号量,初值为1。
● y——控制 writecount 变量修改的互斥信号量,初值为1。
● z——有写者时只允许一个读者在 rmutex 上排队,其他读者在信号量z上排队,初值为1。

计数变量:
● readcount——读者计数器,初值为0。 它控制对 wmutex 的设置。
● writecount——写者数目,初值为0。 它控制对 rmutex 的设置。

semaphore rmutex = 1; 

semaphore wmutex = 1; 

semaphore x = 1; 

semaphore y = 1; 

semaphore z = 1; 

semaphore readcount = 0; 

semaphore writecount = 0; 

读者进程:
while (TRUE) {
    P(z);   // 判断是否有写者

    P(rmutex);
    P(x);
    readcount++;
    if (readcount == 1)
        P(wmutex);
    V(x);
    V(rmutex);

    V(z);
    执行读操作
    P(x);
    readcount--;
    if(readcount == 0)
        V(wmutex);

    V(x);
}

写者进程:
while (TRUE) {
    P(y);
    writecount++;
    if(writecount == 1)
        P(rmutex);
    V(y);

    P(wmutex);
    执行写操作
    V(wmutex);

    P(y);
    writecount--;
    if(writecount == 0)
        V(rmutex);
    V(y);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

住在阳光的心里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值