Fork me on GitHub

阅览室问题 / 图书馆问题

前言

阅览室问题 / 图书馆问题是操作系统中P、V操作部分非常经典的问题!_


阅览室问题 / 图书馆问题

1. 问题描述

有一阅览室,读者进入时必须先在一张登记表上进行登记,该表为每一座位列一表目,包括座号和读者姓名。读者离开时要消掉登记信号,阅览室中共有100个座位。用PV操作控制这个过程。

2.问题分析

由于每个读者都会进行一样的操作:登记->进入->阅读->撤销登记->离开,所以建立一个读者模型即可。
临界资源有:座位,登记表。读者间有座位和登记表的互斥关系,所以设信号量empty表示空座位的数量,初始为100,mutex表示对登记表的互斥访问,初始为1。

3. P、V操作

Semaphore mutex = 1, empty = 100;
Reader():
While(true) {
    P(empty)           //申请空座位
    P(mutex)           //申请登记表
    //登记  
    V(mutex)           //释放登记表
    //进入阅读
    P(mutex)            //申请登记表
    //撤销登记
    V(mutex)            //释放登记表
    V(empty)            //释放座位
}
posted @ 2019-11-29 21:39  克拉默与矩阵  阅读(3865)  评论(0)    收藏  举报