- 1
- 0
- 约7.03千字
- 约 38页
- 2024-04-01 发布于四川
- 举报
第二章进程的描述和控制例1:某车站售票厅,任何时刻最多可容纳20名购票者进入,当售票厅中少于20名购票者时,厅外的购票者可立即进入,否则需要在外面等待。每个购票者可看成一个进程。
semaphoremutex=20while(1){wait(mutex);进入售票厅;购票;退出售票厅;signal(mutex);}
例2:在公共汽车上,司机和售票员各司其职。司机:正常行车、到站停车、启动开车;售票员:售票、开车门、关车门。司机和售票员之间应该密切配合,协调一致,以确保行车安全。请用PV操作实现司机和售票员之间的同步。
司机:while(1){正常行车;到站停车;signal(open);wait(run);启动开车;}售票员:While(1){售票;wait(open);开车门;关车门;signal(run);}用2个私有信号量open、run分别表示可以开门和可以开车.由于初始状态是汽车行车和售票员售票,所以初值应该都为0,到站后才会有司机发消息让开门.
例3:桌子上有一只盘子,每次只能放一只水果。爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,一个儿子专等吃盘子中的橘子,一个女儿专等吃盘子中的苹果。用PV操作实现他们之间的同步机制。fathermothersondaughter
semaphoreempty=1,orange=0,apple=0;orange是son的私有信号量,表示盘子中是否放入橘子。empty是father、mother的私有信号量,表示盘子是否为空。apple是daughter的私有信号量,表示盘子中是否放入苹果。
father(){ while(1){P(empty); 向盘子中放苹果; V(apple);} Daughter(){ while(1){P(apple); 从盘子中取苹果; V(empty);} Mother(){ while(1){P(empty); 向盘子中放橘子; V(orange);} son(){ while(1){P(orange); 从盘子中取橘子; V(empty);
例4:三个进程P1、P2、P3互斥使用一个包含N(N0)个单元的缓冲区。P1每次用produce()生成一个正整数并用put()送入缓冲区某一空单元中;P2每次用getodd()从该缓冲区中取出一个奇数并用countodd()统计奇数个数;P3每次用geteven()从该缓冲区中取出一个偶数并用counteven()统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。(2009年考研题)
semahporeempty=N,even=0,odd=0,mutex=1;P1():while(1){x=produce();wait(empty);wait(mutex);put(x);ifx%2==0 signal(even);else signal(odd);signal(mutex);}
P2():while(1){ wait(odd); wait(mutex); getodd(); countodd(); signal(mutex); signal(empty);}P3():while(1){ wait(even); wait(mutex); geteven(); counteven(); signal(mutex); signal(empty);}
例5:一个供应商用汽车给某超市送货,并把汽车上的货物用超市的三轮车运到仓库中。超市的工作人员也用三轮车从仓库中取货去出售。假设共有3辆三轮车,仓库中只能容纳10辆三轮车的货物,且每次从汽车上取货只能供给一辆三轮车,仓库也只能容纳一辆三轮车进入。考虑相关信号量的定义及初值,并写出用P、V操作实现向仓库中送货及从仓库中取货的同步算法。
信号量定义及初始值:S=3(控制三轮车数量)mutex1=1(控制互斥访问汽车)mutex2=1(控制互斥访问仓库)empty=10(仓库容量)full=0(仓库现有库存量,供给超市)
从汽车到仓库进程:P(empty);P(S);P(mutex1);从汽车上取货;V(mutex1);去仓库;P(mutex2);入仓库装
原创力文档

文档评论(0)