当前位置:网站首页>进程同步与互斥问题纠错
进程同步与互斥问题纠错
2022-08-09 07:59:00 【快乐学习吧】
1.生产者- 消费者问题m个消费者 n 个生产者
empty [-n,k]
生产者进程都执行,k到0 ,继续执行,互斥冲突,堵塞到-n
full [-m,k]
同生产者,假若缓冲区都满,消费者进程执行,同上
当k>=m+n
mutex[-(n+m-1),1]
生产者和消费者进程同时进行,k不会受限,最小值即生产者与消费者进程同时等待堵塞
当k<m+n
mutex[-(k-1),1]
生产者和消费者进程同时进行,但是受k限制,生产者消费者进程并不会都执行
为什么和m+n比较
因为两个进程中empty+full=k
2.1. 假定某小学有 600 人,只有一个阅览室可供 100 个人同时阅读。读者进入和
离开阅览室时都必须在阅览室入口处的一个登记表上登记,阅览室有 100 个
座位,规定每次只允许一个人登记或注销登记。
要求:(1)用 P、V 操作描述读者进程间关系的算法.
(2)指出算法中所用信号量的名称、作用、初值及变化范围
semaphore mutex=1,seat=100;
parbigin
process readeri(i=1,2,3...)
begin
读者来到阅览室
P(seat)
P(mutex)
在登记表上登记
V(mutex)
在阅览室阅览材料
P(mutex)
在登记表上注销
V(mutex)
V(seat)
该读者离开
seat[-500,100]
mutex[-99,1]
- 三个饮料厂 P1、P2、P3 都要生产橙汁,他们各自已购得三种必需原料(水、
糖、浓缩汁)中的两种,待购得第三种原料后即可配制出售。有一供应商能
够不断供应这些原料,但每次只能拿出一种原料放入容器出售,当容器中有
原料时需要该原料的饮料厂可取走,容器空时,供应商又可放入一种原料,
假定:P1 已有糖和水,P2 已有水和浓缩汁,P3 已有糖和浓缩汁,试用 PV 操
作写出供应商和三个饮料厂之间的同步互斥关系。
semaphore s=1,so=0,ss=0,sw=0;
enum{
sugar,water,orange}container;
cobegin
process Provider{
while(true){
P(s)
将原料装入容器内;
if(cantainer==suger)V(so);
else if(cantainer==water)V(ss);
else V(sw);
}}
process P2{
while (true){
P(ss);
从容器中取糖;
V(s);
生产橙汁;}}
process P1{
while (true){
P(so);
从容器中取浓缩汁;
V(s);
生产橙汁;}}
process P3{
while (true){
P(sw);
从容器中取水;
V(s);
生产橙汁;}}
- 有一座东西方向的独木桥,针对以下三种情况,用 P,V 操作分别实现行人的 同步互斥关系: (1)每次只允许一个人过桥; (2)当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须 等待。 (3)独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东 的方向,只允许一个人单独过桥。
(2)
设信号量: mutex=1 //东西方向互斥
MD=1//东向西使用计数变量互斥
MX=1//西向东使用计数变量互斥
设整形变量 CD=0//东向西以上桥人数
CX=0//西向东已上桥人数
process traveler j(){
//从东向西
//上桥
P(MD);
CD++;
if(CD==1)P(mutex);这时起桥上东向西有人,西向东到这个地方会互斥堵塞
V(MD);
过桥
//下桥
P(MD);
CD--;
if(CD==0)V(mutex);
V(MD);
}
(3)
此问题与读者写者问题相同
int read=0;//计数器
semaphore ws=1 ,mutex=1;
cobegin
process EtoW(){
P(mutex);
read++;
if(read==1)P(ws); //这个时候,西向东会冲突
V(mutex);
过桥;
P(mutex);
read--;
if(read==0)V(ws);
V(mutex);}
coend;
process WtoE()
{
P(ws);
过桥
V(ws);
}
边栏推荐
猜你喜欢
收藏!Solidworks从设计到制造流程解决方案 2022来了!
The String class objects created by the JVM memory allocation and the difference between equals and = =
一文搞懂 条件编译和预处理指令 #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined 详解
MDK Keil debug时, watch1中全局变量不更新
弹性盒样式、移动端、VW适配、响应式布局
权限(上)
Exclude null values when Oracle limits
Selenium测试案例一步步学之(2)Selenium自动测试脚本模块化(下)
【无标题】
74HC595芯片引脚说明
随机推荐
Anaconda use proxy
.net(三) 项目结构
IP地址及子网划分
HOOPS是什么?这4款3D软件开发工具包你还不知道?
VOC format label to YOLO format
The story of the disappearing WLAN of Windows 10 computers
LeetCode:876. 链表的中间结点————简单
74HC595芯片引脚说明
实现弹簧柔性状态的2种方式 | Solidworks教程
Oracle 限制时将空值排除
“互联网+”大学生创新创业大赛经历
C: print the diamond
yolov5检测数据集标签数量
MySql作业练习题
研发分享:机器学习卡片的使用
Exclude null values when Oracle limits
Anaconda 更换默认虚拟环境
LVM与磁盘配额
File Handling (IO)
H3C_利用策略路由实现出口双线路负载(选路)的部署