阅览室问题 / 图书馆问题


前言

阅览室问题 / 图书馆问题是操作系统中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)            //释放座位
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM