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 @   克拉默与矩阵  阅读(3756)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示