进程的并发控制.PPTVIP

  • 0
  • 0
  • 约1.5万字
  • 约 113页
  • 2025-12-05 发布于浙江
  • 举报

3.5信号量机制--解决同步问题实现原理P操作的理解用信号量S表示一种消息,如果消息还没有产生,则S=0,调用P(S)操作后,调用者将成为等待状态,申请进入临界区失败。如果消息已经存在,则S0,调用P(S)操作后,调用者不会成为等待状态,即申请进入临界区成功。3.5信号量机制--解决同步问题实现原理V操作的理解若调用V(S)操作前S=0,表示消息还没有产生也没有等待消息的进程,这时调用V(S)操作后,S!=0,调用V(S)后,意味着消息产生,即相当通知或者唤醒操作。若调用V操作前S0,表示消息还没有产生且有进程在等待该消息,这时调用V(S)操作后将释放一个在等待消息的进程,即调用V(S)操作的进程把消息发给在等待消息的进程且允许它继续进行,即相当通知或者唤醒操作。3.5经典同步问题

—生产者/消费者问题生产者与消费者问题描述现假定有一个生产者和一个消费者,他们共用一个缓冲器,生产者不断地生产物品,每生产一件物品就要存入缓冲器,但缓冲器中每次只能存入一件物品,只有当消费者把物品取走后,生产者才能把第二件物品存入缓冲器。同样地,消费者不断地取出物品去消费,当缓冲器中有物品时他就可以去取,每取走一件物品后必须等生产者放入一件物品才可再取。3.5经典同步问题

—生产者/消费者问题生产者进程和消费者进程(未采用同步机制前的主要代码)Processproducer{L1:produceaproduct;Buffer=product;gotoL1;}Processconsumer{L1:takeaproductfromBuffer;consume;gotoL1;}3.5经典同步问题

—生产者/消费者问题问题分析消息的个数:2个需要的信号量两个,定义两个变量SP、SG分别表示生产者和消费者的信号量(私有信号量)两个进程生产和消费各自独立,并发执行两个进程只在访问公共的缓冲器把物品存入或取出时才要互通消息3.5经典同步问题

—生产者/消费者问题信号量初值的分析初始状态,缓冲器为空,允许生产者生产的物品存入缓冲器,相当于通知消费者进程取物品的消息已经到了,代表此消息的信号量SP初值应该为“1”。初始状态,缓冲区为空,不能取数消费,也就不能通知再生产,所以对应信号量SG的初值应该为“0”。3.5经典同步问题

—生产者/消费者问题信号量的定义SemaphoreSP,SG;SP=1;SG=0;SP:表示是否可以把物品存入缓冲区,由于缓冲区每次只能放一个物品,所以初值为1。SG:表示缓冲区是否存在有物品,显然初值为0,表示开始还没有物品在缓冲区。3.5经典同步问题

—生产者/消费者问题实现的基本方法生产者进入缓冲区前调用P操作判断消息是否到达,或者说申请进入的消息是否允许通过,退出缓冲区时,调用V操作发送消息通知消费者,相当唤醒消费者消费者在进入缓冲区前,首先调用P操作判断是否可以取数,即通知取数的消息是否到达,当取数后退出缓冲区,调用V操作,发送消息,通知生产者3.5经典同步问题

—生产者/消费者问题将PV操作加入到原来的伪代码中,结果如下SemaphoreSP,SG;SP=1;SG=0;intBuffer;Processproducer{L1:produceaproduct;P(SP);Buffer=product;V(SG);gotoL1;}Processconsumer{L1:P(SG);takeaproductfromBuffer;V(SP);consume;gotoL1;}3.5经典同步问题

—生产者/消费者问题分析下列几种情况,看PV操作是否能管理:

文档评论(0)

1亿VIP精品文档

相关文档