PV操作其他问题

news/2024/7/8 4:01:37 标签: PV, semaphore, 操作系统

一、飞机票问题

Var A : ARRAY[1..m] of integer;
  mutex : semaphore;
  mutex:= 1;
cobegin
process Pi
	var Xi:integer;
begin
<span style="white-space:pre">	</span>L1:
	  按旅客定票要求找到A[j];
	  P(mutex);
	  Xi := A[j];
	  if Xi>=1  then 
      begin 
        Xi:=Xi-1;A[j]:=Xi; 
        V(mutex);  {输出一张票};
      end;
	  else begin 
        V(mutex);  {输出“票已售完”};     
      end;
    goto L1;
 end;
coend


二、睡眠的理发师问题

理发店理有一位理发师、一把理发椅和n把供等候理发的顾客坐的椅子

如果没有顾客,理发师便在理发椅上睡觉

一个顾客到来时,它必须叫醒理发师

如果理发师正在理发时又有顾客来到,则如果有空椅子可坐,就坐下来等待,否则就离开

<pre name="code" class="plain">int waiting=0;              //等候理发顾客坐的椅子数
int CHAIRS=N;               //为顾客准备的椅子数
semaphore customers, barbers, mutex;
customers=0; barbers=0; mutex=1;

process barber( ) {
while(true) {
  P(customers); 
    //有顾客吗?若无顾客,理发师睡眠
  P(mutex);           
    //若有顾客时,进入临界区
    waiting--;  //等候顾客数少一个
  V(barbers); //理发师准备为顾客理发
  V(mutex);          //退出临界区
  cut_hair(); 
      //理发师正在理发(非临界区)
	}
}

process customer_i( ) {
    P(mutex);              //进入临界区
    if(waiting<CHAIRS) {     
      //有空椅子吗
      waiting++;  //等候顾客数加1
    V(customers);  //唤醒理发师
    V(mutex);      //退出临界区
     P(barbers);  
        //理发师忙,顾客坐下等待
     get_haircut(); //否则顾客坐下理发
     }
    else  V(mutex); //人满了,走吧!
}


 
 

三、银行业务问题

某大型银行办理人民币储蓄业务,由n个储蓄员负责。每个顾客进入银行后先至取号机取一个号,并且在等待区找到空沙发坐下等着叫号。取号机给出的号码依次递增,并假定有足够多的空沙发容纳顾客。当一个储蓄员空闲下来,就叫下一个号。

var customer_count, server_count, mutex: semaphore;
    customer_count:=0; server_count:=n; 
    mutex:=1; 

process customeri(i=1,2,….)
     begin
          take a number;
          P(mutex);
          等待区找到空沙发坐下;
          V(mutex);
          V(customer_count);
          P(server_count);
     end;

Process servers j(j=1,2,3,…)
     Begin
      L: P(customer_count);
         P(mutex);
  被呼号顾客离开沙发走出等待区;
         V(mutex);
       为该号客人服务;
       客人离开;
         V(server_count);
      go to L;
     end; 

四、缓冲区管理

*有n个进程将字符逐个读入到一个容量为80的缓冲区中(n>1),当缓冲区满后,由输出进程Q负责一次性取走这80个字符。这种过程循环往复,请用信号量和P、V操作写出n个读入进程(P1,P2,…Pn)和输出进程Q能正确工作的的动作序列
var mutex,empty,full:semaphore;
count,in:integer
buffer:array[0..79] of char;
mutex=1;empty=80;full=0;
count=0;in=0;

process Pi(i=1,...,n))
begin
  L: 读入一字符到x;
  P(empty);
  P(mutex);
    Buffer[in]=x;
    in=(in+1) % 80;
    count++;
    if (count==80)  
     {count=0; V(mutex); V(full);  }
    else V(mutex);
  goto L;
end;

process Q
begin
  while(true) {
  P(full);
  P(mutex);
   for(int j=0; j< 80;j++) 
   read buffer[j];
   in:=0;
  V(mutex);
    for (int j=0; j< 80;j++) 
  V(empty);
   }
end; 

五、吸烟者问题(patil,1971)。

三个吸烟者在一个房间内,还有一个香烟供应者。为了制造并抽掉香烟,每个吸烟者需要三样东西:烟草、纸和火柴,供应者有丰富货物提供。三个吸烟者中,第一个有自己的烟草,第二个有自己的纸和第三个有自己的火柴。供应者随机地将两样东西放在桌子上,允许一个吸烟者进行对健康不利的吸烟。当吸烟者完成吸烟后唤醒供应者,供应者再把两样东西放在桌子上,唤醒另一个吸烟者。

semaphor:s0,s1,s2,s3;
S0=1;S1=0;S2=0;S3=0;

Process businessman {        
//供应者进程
L1:i:=RAND( ) mod 3;
       j:=RAND( ) mod 3;
   If  (i=j)  then goto L1;
  P(S0);
   Put_items [i]_on_table;
   Put_items [j]_on_table;
   if (i=0 and j=1) or (i=1 and j=0) V(S[3]);
   if (i=1 and j=2) or (i=2and j=1)  V(S[1]);
   if (i=0 and j=2) or (i=2 and j=0) V(S[2]);
goto L1;
}

Process consumer (k) {    
//吸烟者进程,k=1,2,3
L1:
   P(S[k]);
  take_one_item_from_table;
  take_one_item_from_table;
   V(S0);
 make_cigarette_and_smokeing
 goto L1;
}




http://www.niftyadmin.cn/n/1741125.html

相关文章

url带参数document.get_Superlurl:一款开源关键词URL采集工具

superl-url是一款开源的&#xff0c;并且功能强大的关键词URL采集工具&#xff0c;可以根据关键词&#xff0c;对搜索引擎内容检索结果的网址内容进行采集。 程序主要运用于安全渗透测试项目&#xff0c;以及批量评估各类CMS系统0DAY的影响程度&#xff0c;同时也是批量采集自…

aws php 上传文件 限制大小_zabbix-基础系列(十七)--实战之监控 php-fpm

zabbix 监控 php-fpmzabbix监控php-fpm主要是通过nginx配置php-fpm的状态输出页面&#xff0c;在正则取值.要nginx能输出php-fpm的状态首先要先修改php-fpm的配置&#xff0c;没有开启nginx是没有法输出php-fpm status。1、修改文件php-fpmvim /application/php-5.5.32/etc/php…

电脑怎么改ip地址更改_图解:电脑怎么查本机的IP地址

直接上图文解释&#xff0c;你看一下就明白了&#xff1a;第一步&#xff1a;键盘win键R 调出运行的命令窗口第二步&#xff1a;输入命令字符&#xff1a;ipconfig&#xff0c;如下图&#xff1a;自己动动手&#xff0c;巧用电脑一点小技巧。

PV操作之独木桥问题

一、东西向汽车过独木桥&#xff0c;为了保证安全&#xff0c;只要桥上无车&#xff0c;则允许一方的汽车过桥&#xff0c;待一方的汽车全部过完后&#xff0c;另一方的汽车才允许过桥。 semaphore wait,mutex1,mutex2; mutex1mutex21;wait1; bridge1; int counter1,counter2; …

a标签禁止点击_以案说法!销售无标签的瓶装芝麻油如何定性处理?

提醒近期微信公众号平台调整了推送机制&#xff0c;点击上方 “食药法苑 ” → 点击右上角“...” → 点选“设为星标 ★ ”&#xff0c;以后就能第一时间看到我们的文章啦&#xff01;食药法苑点击关注我&#xff01;各种法规资料尽在法苑....一、案情近日&#xff0c;安徽省…

bios sgx需要开启吗_bios怎么设置uefi启动

uefi启动是一种新的主板引导项&#xff0c;如果在bios下设置uefi&#xff0c;其电脑的运行速度能颠覆你对于开机速度的以往看法&#xff0c;在bios设置uefi也好操作&#xff0c;几个步骤就能够解决。减少了BIOS自检的步骤&#xff0c;加快平台的启动是uefi bios的最大特点&…

iaas paas saas_一文快速搞懂IaaS、PaaS、SaaS 三种云服务模式

企业参考云采购时&#xff0c;通常会考虑三种云服务模式。目前&#xff0c;云计算服务种类主要分为 IaaS(基础架构即服务)、PaaS(平台即服务)、SaaS(软件即服务)三类。每种云模型都提供了自己的特定功能和特性&#xff0c;来适应不同的应用场景和企业。下面来介绍一下三种模型的…

ML CV DM PP

CV会议领先研究室专家代码网址 本文基于http://www.sciencenet.cn/m/Print.aspx?id224651 的结果&#xff0c;增加了自己搜索和国内一些信息。 作机器视觉和图像处理方面的研究工作&#xff0c;最重要的两个问题&#xff1a;其一是要把握住国际上最前沿的内容&#xff1b;其二…