PV操作 飞机票、理发师、银行、缓冲区、吸烟

本文通过飞机票问题、理发师睡眠问题、银行业务问题、缓冲区管理和吸烟者问题五个经典案例,详细阐述了PV操作在并发编程中的应用,展示了如何使用信号量和P、V操作解决资源调度和同步问题。
摘要由CSDN通过智能技术生成

一、飞机票问题

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(custom
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值