操作系统中PV操作的几个例子
题1:面包师有很多面包,由n个销售人员推销。每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲下来时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。
思路:顾客进店后按序取号,并等待叫号,销售人员空闲之后也是按序叫号,并销售面包。因此同步算法只要对顾客取号和销售人员叫号进行合理的同步即可。我们使用两个变量i和j分别记录当前的取号值和叫号值,并各自使用一个互斥信号用于对i和j的访问和修改
代码:
题1:面包师有很多面包,由n个销售人员推销。每个顾客进店后取一个号,并且等待叫号,当一个销售人员空闲下来时,就叫下一个号。试设计一个使销售人员和顾客同步的算法。
思路:顾客进店后按序取号,并等待叫号,销售人员空闲之后也是按序叫号,并销售面包。因此同步算法只要对顾客取号和销售人员叫号进行合理的同步即可。我们使用两个变量i和j分别记录当前的取号值和叫号值,并各自使用一个互斥信号用于对i和j的访问和修改
代码:
int i=0,j=0;semaphore mutex_i=1,mutex_j=1;Consumer(){ //进入面包店 p(mutex_i); //取号i i++; v(mutex_i); //等待叫号i并购买面包}Seller(){ while(1) { p(mutex_j);