信号量机制例题集2
OS进程同步(信号量典型题)

例题1(北京大学1999年)有一个仓库,可以存放A和B两种产品,仓库的存储空间足够大,但要求:(1)一次只能存人一种产品((A或B);(2)一N< A产品数量一B产品数量<M其中,N和M是正整数。
试用“存放A’和‘存放B’以及P操作和V操作描述产品A和产品B的人库过程。
解答:应先将表达式转换成制约条件,不可在程序中直接使用该表达式将表达式分解为:B产品数量—A产品数量<NA产品数量—B产品数量<M可这样理解:(1)若只放人A产品,而不放入B产品,则A产品最多可放M—1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为M—1),当计数器值为0时,进程程A被阻塞;每当放入一个B产品,则可令A产品的计数器增加1,表明A产品可以多一次放入产品的机会;同理,(2)若只放人B产品,而不放入A产品,则B产品最多可;放N一1次便被阻塞,即A进程每操作一次就应当将计数器减1(计数器初值为N—1)。
当计数器值为0时,进程B被阻塞;每当放人一个A产品,则可令B产品的计数器增加1,表明B产品可以多一次放入产品的机会。
由此可见,该问题是一个同步控制问题。
又因为一次仅允许一种产品人库,设置信号量mutex控制粮进程互斥访问临界资源(仓库)。
过程如下:beginmutex:=1;Sa := M-1;Sb := N-1;ParbeginA产品beginrepeatP (Sa);P (mutex);A人库;V (mutex);V (Sb);Until false;End;B产品beginrepeatP (Sb);P (mutex);B人库;V (mutex);V (Sa);Until false;End;rend;例题2(华中理工大学1999年试题)设公共汽车上,司机和售票员的活动分别是:司机:售票员:启动车辆上乘客正常行车关车门到站停车售票开车门下乘客在汽车不断地到站,停车,行驶过程中,这两个活动有什么同步关系?并用信号灯的P, V操作实现它们的同步。
信号量机制例题集2

爸爸,妈妈,儿子,女儿
Var mutex,apple,banana:Semaphore:=1,0,0;son() Main() { while (true) { cobegin { p(banana);从盘子取香蕉; v(mutex); Father();mother();son();daugher(); 吃香蕉;} Coend } } Father() { while (true) {p(mutex); 将苹果放入盘子;v(apple);} daugher() { while (true) } { p(apple);从盘子取苹果; v(mutex); Mother() 吃苹果;} { while (true) } { p(mutex);将香蕉放入盘子;v(banana);} } 返回
Use() { while(true) { p (full) ;
p(count) ; P(mutex2) ;
从缸中取水;
v (mutex2) ; v(empty) ; v (count) ;
} } 返回
信号量机制例题:理发师
• 理发店里有一位理发师,一把理发椅,n把 侯等待理发的顾客坐的椅子。如果没有顾 客,理发师便在理发椅上睡觉,当一个顾 客到来时,他必须叫醒理发师。如果理发 师正在理发时又有顾客来到,那么,如果 又有空椅子可坐,顾客就坐下等待,否则 就离开理发店。
Else { p(sb); p(mutex); 将产品入库; v(mutex); v(sa);
返回
信号量机制例题:阅览室
有一个阅览室,共有100个座位,读者进入 时必须在一张登记表上登记,该表为每一座 位列一表目,包括做好和读者姓名等,读者 离开时要削掉登记的信息。
阅览室
Semaphore mutex=1;seats=100;readers=0 getin() { while(true) { p(seats); p(mutex); 填写登记表; 进入阅览室读书; v(mutex); v(readers); } }
习题册第二章参考答案

习题集第二章参考答案一、单项选择题1、 D2、 D3、 B4、 D5、 C6、 B7、 A 8、 B9、 C10、 B11、 C12、 B13、 D14、 C15、 D16、 A17、 B18、 A19、 B20、 D21、 C22、 D23、 B24、 D25、 D26、 B27、 C28、 B29、 A30、 B31、 A32、 B33、 A34、 C二、填空题1 进程2 就绪执行阻塞3 等待的事件发生的4 进程控制块5 进程控制块(或PCB)6 99 1 1007 就绪8 静止阻塞9 阻塞就绪10 共享存储器,管道通信,消息传递11 信号量12 [1-n,1]13 进程控制块(PCB)14 同步互斥信号量15 wait(mutex)signal(mutex)16 顺序性,封闭性,可再现性17 并发18 临界区19 wait, signal20 1,(1-n)或-(n-1)21 722 wait signal23 阻塞就绪三、判断题×√1×2√3×4×5×6×7√8×9×10√11√12×13√四、简答题1、解释进程的顺序性和并发性。
答:进程的顺序性是指进程在顺序的处理器上的执行是严格按序的,只有在前一个操作结束后才能开始后继操作。
进程并发性是指一组进程可以轮流占用处理器,一个进程的工作没有全部完成之前,另一个进程就可开始工作。
把这样的一组进程看做是同时执行的,把可同时执行的进程称为并发进程。
所以,进程的顺序性是对每个进程而言的,进程的并发性是对一组具有顺序性的进程而言的。
一组进程并发执行时各进程轮流占用处理器交替执行,占用处理器的进程按各自确定的顺序依次执行指令。
2、简述进程与程序的区别和联系。
答:区别:(1)进程能真实地描述并发,而程序不能。
(2)动态性是进程的基本特征,进程实体具有创建、执行和撤销的生命周期,而程序只是一组有序指令的集合,存放在某种介质上,是静态的。
计算机操作系统(习题集)第二章 答案

第二章进程管理一、单项选择题1、在单一处理机上执行程序,多道程序的执行是在(B)进行的。
A.同一时刻B. 同一时间间隔内C.某一固定时刻D. 某一固定时间间隔内2、引入多道程序技术后,处理机的利用率( C)。
A.降低了B. 有所改善C.大大提高D. 没有变化,只是程序的执行方便了3、顺序程序和并发程序的执行相比,( C)。
A.基本相同 C.并发程序执行总体上执行时间快B. 有点不同 D.顺序程序执行总体上执行时间快4、单一处理机上,将执行时间有重叠的几个程序称为(C )。
A.顺序程序B. 多道程序C.并发程序D. 并行程序5、进程和程序的本质区别是(D )。
A.存储在内存和外存 B.顺序和非顺序执行机器指令C.分时使用和独占使用计算机资源D.动态和静态特征6、进程就是程序在并发环境中的执行过程,它是系统进行资源分配和调度的一个基本单位。
进程具有[1A]、[2D]、调度性、异步性和结构性等基本特征。
进程是一次执行过程,具有生命期体现了进程的[1]特征。
进程由程序段、[3B]、[4C]组成,其中[4]是进程在系统中存在的唯一标识。
供选择的答案:[1][2] :A、动态性 B、静态性 C、共行性 D、并发性 E、可执行性 F、易用性[3] :A、过程 B、数据 C、进程标识符 D、函数[4] :A、FCB B、FIFO C、PCB D、JCB7、进程执行时的间断性,决定了进程可能具有多种状态。
进程的基本状态有三种,在分时系统中,当一个进程拥有的时间片到时,则该进程即由[1D]进入[2A]。
如果出现因某种原因使得处理机空闲时,则需要从就绪队列中选择一进程,并将处理机分配给它,此时该进程进入[3D],这个过程是由[4C]来完成。
供选择的答案:[1][2][3] :A、就绪状态 B、静止状态 C、阻塞状态 D、运行状态[4] :A、进程控制程序B、资源分配程序C、进程调度程序 D、处理机分配程序8、为了描述进程的动态变化过程,采用了一个与进程相联系的(C ),根据它而感知进程的存在。
信号量的PV操作(例题)汇总

???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。
参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。
V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。
PV操作的物理含义:信号量S值的大小表示某类资源的数量。
当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。
每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。
每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。
无论以上哪种情况,执行V操作的进程都可继续运行。
1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。
设两个信号量S和C,初值为S=0;C=0;司机:L1:正常行车售票员:L2:售票到站停车P(S)V(S)开车门P(C)关车门启动开车V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。
爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。
(2)桌上一个盘子,只能放一只水果。
操作系统信号量例题

操作系统信号量例题信号量是操作系统中用于同步和互斥的一种机制。
它可以用于进程间的通信和资源的管理。
下面我将从多个角度来回答关于操作系统信号量的例题。
1. 什么是信号量?信号量是一个整数变量,用于控制对共享资源的访问。
它可以是二进制信号量(取值为0或1)或计数信号量(取值大于等于0)。
二进制信号量用于互斥访问共享资源,计数信号量用于控制资源的数量。
2. 信号量的基本操作有哪些?常见的信号量操作有P操作(等待操作)和V操作(发送操作)。
P操作用于申请资源,如果资源不可用,则进程将被阻塞。
V操作用于释放资源,使得其他等待资源的进程可以继续执行。
3. 请举个例子说明信号量的使用场景。
假设有一个共享资源,比如打印机,多个进程需要使用它。
为了避免冲突,可以使用信号量来进行控制。
当一个进程要使用打印机时,它需要执行P操作来申请打印机资源,如果打印机正在被其他进程使用,则该进程将被阻塞。
当打印机空闲时,进程执行V操作释放打印机资源,其他等待资源的进程可以继续执行。
4. 信号量如何实现互斥?互斥是指只允许一个进程访问共享资源。
可以使用二进制信号量来实现互斥。
当一个进程要访问共享资源时,它执行P操作申请资源,如果资源已经被其他进程占用(信号量的值为0),则该进程被阻塞。
当资源被释放时,执行V操作使得等待资源的进程可以继续执行。
5. 信号量如何实现同步?同步是指多个进程按照一定的顺序执行。
可以使用计数信号量来实现同步。
例如,有两个进程A和B,进程A需要等待进程B完成某个操作后才能继续执行。
可以使用一个计数信号量来控制,初始值为0。
进程A执行P操作等待信号量,进程B完成操作后执行V 操作释放信号量,进程A才能继续执行。
6. 信号量的优缺点是什么?信号量的优点是可以实现进程间的同步和互斥,避免竞态条件和资源冲突。
它是一种简单而有效的机制。
然而,信号量也存在一些缺点。
例如,信号量的使用需要谨慎,如果使用不当可能导致死锁或活锁的发生。
信号量地PV操作(例题)
???信号量的PV操作是如何定义的?试说明信号量的PV操作的物理意义。
参考答案:P(S):将信号量S减1,若结果大于或等于0,则该进程继续执行;若结果小于0,则该进程被阻塞,并将其插入到该信号量的等待队列中,然后转去调度另一进程。
V(S):将信号量S加1,若结果大于0,则该进程继续执行;若结果小于或等于0,则从该信号量的等待队列中移出一个进程,使其从阻塞状态变为就绪状态,并插入到就绪队列中,然后返回当前进程继续执行。
PV操作的物理含义:信号量S值的大小表示某类资源的数量。
当S>0时,其值表示当前可供分配的资源数目;当S<0时,其绝对值表示S信号量的等待队列中的进程数目。
每执行一次P操作,S值减1,表示请求分配一个资源,若S≥0,表示可以为进程分配资源,即允许进程进入其临界区;若S<0,表示已没有资源可供分配,申请资源的进程被阻塞,并插入S的等待队列中,S的绝对值表示等待队列中进程的数目,此时CPU将重新进行调度。
每执行一次V操作,S值加1,表示释放一个资源,若S>0,表示等待队列为空;若S≤0,则表示等待队列中有因申请不到相应资源而被阻塞的进程,于是唤醒其中一个进程,并将其插入就绪队列。
无论以上哪种情况,执行V操作的进程都可继续运行。
1、设公共汽车上,司机和售票员的活动分别是:司机的活动:启动车辆;正常行车;到站停车;售票员的活动:关车门;售票;开车门;在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用P、V操作实现它们的同步。
设两个信号量S和C,初值为S=0;C=0;司机: L1:正常行车售票员: L2:售票到站停车 P(S)V(S)开车门P(C)关车门启动开车 V(C)GO TO L1 GO TO L22、请用PV操作实现他们之间的同步关系:(1)桌上一个盘子,只能放一只水果。
爸爸放苹果,妈妈放桔子,儿子只吃桔子,女儿只吃苹果。
(2)桌上一个盘子,只能放一只水果。
【转】进程同步之信号量机制(pv操作)及三个经典同步问题
【转】进程同步之信号量机制(pv操作)及三个经典同步问题上篇博客中(),我们对临界区,临界资源,锁机制详细解读了下,留下了⼀个问题,就是锁机制只能判断临界资源是否被占⽤,所以他解决了互斥问题,但是他不能确定前⾯的进程是否完成,所以他不能⽤于同步问题中。
下⾯就为你讲解信号量机制是如何解决这⼀问题的。
1.信号量机制信号量机制即利⽤pv操作来对信号量进⾏处理。
什么是信号量?信号量(semaphore)的数据结构为⼀个值和⼀个指针,指针指向等待该信号量的下⼀个进程。
信号量的值与相应资源的使⽤情况有关。
当它的值⼤于0时,表⽰当前可⽤资源的数量;当它的值⼩于0时,其绝对值表⽰等待使⽤该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
⼀般来说,信号量S³0时,S表⽰可⽤资源的数量。
执⾏⼀次P操作意味着请求分配⼀个单位资源,因此S的值减1;当S<0时,表⽰已经没有可⽤资源,请求者必须等待别的进程释放该类资源,它才能运⾏下去。
⽽执⾏⼀个V操作意味着释放⼀个单位资源,因此S的值加1;若S£0,表⽰有某些进程正在等待该资源,因此要唤醒⼀个等待状态的进程,使之运⾏下去。
2.PV操作什么是PV操作?p操作(wait):申请⼀个单位资源,进程进⼊经典伪代码wait(S){while(s<=0)<span style="white-space:pre"> </span>//如果没有资源则会循环等待;;S-- ;}v操作(signal):释放⼀个单位资源,进程出来signal(S){S++ ;}p操作(wait):申请⼀个单位资源,进程进⼊v操作(signal):释放⼀个单位资源,进程出来PV操作的含义:PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进⾏操作,具体定义如下:P(S):①将信号量S的值减1,即S=S-1;②如果S<=0,则该进程继续执⾏;否则该进程置为等待状态,排⼊等待队列。
操作系统 信号量机制P、V操作习题全解
Get
Copy
Put
A
B
卡片机
buffer1
C
D
buffer2
打印机
• 2. 互斥信号量 s1=1, s2=1; • (因为只有一个get、copy和put进程,故可不定
义互斥信号量) • 同步信号量4个: • full1=0, empty1=1; 为一对 • full2=0, empty2=1; 为一对
• 两个同步关系: • 有顾客营业员才叫号s1=0 • 营业员先叫号,顾客才能被服务service
=0
• Process 顾客 i:
• { P (empty);
• P(mutex);
• 从取号机获取一个号码;
• V(mutex);
• V(s1);
• P(service); //等待叫号;
• V (empty); • 获得服务; •}
Agent() int rr, rr1=4; while (1) { do
rr = random (3); while (rr == rr1);
rr1=rr; wait (done); if (rr == 0) {
put paper and tobacco; signal (PaperTobacco ); } else if (rr == 1) {
put match and tobacco; signal (MatchTabacco);
}
else { put paper and match; signal (PaperMatch);
} Smaker1 () /* has match */ while(1) { wait (PaperTobacco);
操作系统习题集 配套 答案
1.研究操作系统的主要观点有那些?答:(1)资源的观点:研究如何对计算机系统中的各种软、硬件资源进行管理;怎样使计算机系统协调一致地、有效地为用户服务;如何既发挥计算机系统资源的使用效率、提高计算机系统的服务质量,又确保计算机系统的安全可靠。
(2)用户观点:操作系统是一个黑盒子,配置了操作系统的计算机与原来真实的物理计算机迥然不同,因为它提供了用户使用计算机的更方便手段,构造了一台虚拟机,采用的操作命令决定了虚拟机的功能。
(3)进程观点:从进程角度分析操作系统,则所有进程的活动就构成了操作系统的当前行为,在每一个瞬间都有一棵进程家族树,它展示着操作系统行为主体的一个快照。
(4)模块分层观点:用模块分层观点讨论模块之间的关系或者说讨论如何形成操作系统的架构,如何安排连结这些程序模块才能构造一个结构简单清晰、逻辑正确、便于分析和实现的操作系统。
2.什么是操作系统?简述现代操作系统的特征。
答:操作系统是控制和管理计算机系统内各种硬件和软件资源、合理有效地组织计算机系统的工作,为用户提供一个使用方便可扩展的工作环境,从而起到连接计算机和用户的接口作用。
现代操作系统具有如下特征:○1并发(共行)性:指能处理多个同时性活动的能力。
I/O操作和计算重叠,内存中同时存放几道用户程序,这些都是并发的例子。
○2共享:指多个计算任务对资源的共同享用。
并发活动可能要求共享资源和信息;多个用户共享一个程序的同一个副本,而不是分别向每个用户提供一个副本可以避免重复开发,节省人力资源。
○3不确定性:指操作系统必须能处理任何一种事件序列,以使各个用户的算题任务正确地完成。
3.操作系统和用户程序之间的关系是什么?答:操作系统通过虚拟及其界面给用户程序提供各种服务,用户程序在运行过程中不断使用操作系统提供的服务来完成自己的任务。
如用户程序在运行过程中需要读写磁盘,这时就要调用操作系统的服务来完成磁盘读写操作。
另一方面,用户程序不可能先于操作系统启动之前启动,因此每次启动一个用户程序,都相当于操作系统将控制转移给用户程序;而在用户程序执行完毕后,又将控制还回给操作系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Use() { while(true) { p (full) ;
p(count) ; P(mutex2) ;
从缸中取水;
v (mutex2) ; v(empty) ; v (count) ;
} } 返回
信号量机制例题:理发师
• 理发店里有一位理发师,一把理发椅,n把 侯等待理发的顾客坐的椅子。如果没有顾 客,理发师便在理发椅上睡觉,当一个顾 客到来时,他必须叫醒理发师。子可坐,顾客就坐下等待,否则 就离开理发店。
信号量机制例题:出租车
某宾馆门前有一个出租车停车位,假设宾馆 每一位顾客出门都要乘坐出租车,并且对顾 客约定:如果有其他顾客在此等车位等车, 则在旁等待;否则在此等车;此停车位有车 则乘坐。对出租车做出约定:如果此停车位 已停有车,则等待此停车位空闲;否则停到 此停车位等待顾客;有顾客则搭载顾客离开。 试用P、V原语编写程序描述顾客与出租车的 行为。
信号量机制例题
• • • • • • A、B两种产品 阅览室 吸烟者 出租车 南开大学和天津大学 司机和售票员 • 爸爸,妈妈,儿子,女儿
• 理发师
• R,M,P,共享同一缓 冲区 • 信箱传递消息
• 分拣黑、白棋子
生产者-消费者
• 和尚吃水
读者-写者
• 过独木桥 • 读者——写者问题、 写者优先 • 桥上不允许两车交会, 但允许同方向多辆车 依次通过。 • 猴子过峡谷 • 单行车道
else V(mutex); end.返回
读者——写者问题
一个数据文件或记录可被多个进程共享。 只要求读文件的进程称为“Reader进程”, 其它进程则称为“Write进程”。 允许多个进程同时读一个共享对象,但不允 许一个Write进程和其他Reader进程或 Write进程同时访问共享对象。 “读者——写者问题”是保证一个Write进程 必须与其他进程互斥地访问共享对象的同 步问题。
•
S = S + 1 S ≤ ≥ 0 是 否 否 是 返 回
•
V操作: (1)S加l; (2)若相加结果大于零,进程继续执行 (无等待该临界资源的阻塞进程); (3)若相加结果小于或等于零,则从该信 号的等待队列中唤醒一个等待进程,然后 再返回原进程继续执行或转进程调度。
唤醒等待队列中的一个进程 调用进程入等待队列 返回或转进程调度 转进程调度
生产者—消费者问题:
有一群生产者进程生产产品供给消费 者进程消费,为使两者并发执行,在两者 之间设置具有n个缓冲区的缓冲池,生产者 进程所生产的产品放入一个缓冲区中,消 费者进程可从一个缓冲区中取走产品去消 费。
生产者-消费者
Var mutex, empty, full: semaphore :=1, n, 0; consumer : begin buffer: array [ 0, …, n-1] of item; repeat in, out: integer :=0, 0; wait(full); begin wait(mutex); nextc:=buffer(out); parbegin out:=(out+1) mod n; producer : begin signal(mutex); repeat signal(empty); … consume the item in nexc; until false; produce an item in nexp; end parend … end wait(empty); wait(mutex); buffer(in):=nexp; in:=(in+1) mod n; signal(mutex); signal(full); until false; end
信号量机制例题:和尚吃水
• 某寺庙,有小、老和尚若干,有一水 缸,有小和尚提水入缸供老和尚饮用。 水缸可容10 桶水,水取自同一井中。 水井径窄,每次只能容一个桶取水。 水桶总数为3个。每次入、取缸水仅为 1桶,且不可同时进行。给出取水、入 水的算法描述。
Semaphore mutex1=1;mutex2=1; empty=10;full=0;count=3; Main() {cobegin get(); use(); coend } Get() {while (true) { p(empty) ; p(count) ; P(mutex1) ; 从井中取水; v(mutex1) ; P(mutex2) ; 将水倒入缸中; v (mutex2) ; v (count) ; v (full) ; } }
盘中可同时放两个水果?N个水果?
• 爸爸、妈妈、两个儿子、两个女儿: 桌上有一空盘,最多可以容纳两个水 果。爸爸可向盘中放苹果,妈妈向盘 中放桔子,两个儿子专等吃盘中的桔 子,两个女儿专等吃盘中的苹果。
Var empty,mutex,apple,banana:Semaphore :=2,1,0,0; Main() { cobegin Father();mother();son();daugher(); Coend } Father() { while (true) {p(empty); p(mutex); 将苹果放入盘子; v(mutex); v(apple);} } Mother() { while (true) { p(empty);p(mutex); 将香蕉放入盘子; v(mutex); v(banana);} }
爸爸,妈妈,儿子,女儿
Var mutex,apple,banana:Semaphore:=1,0,0;son() Main() { while (true) { cobegin { p(banana);从盘子取香蕉; v(mutex); Father();mother();son();daugher(); 吃香蕉;} Coend } } Father() { while (true) {p(mutex); 将苹果放入盘子;v(apple);} daugher() { while (true) } { p(apple);从盘子取苹果; v(mutex); Mother() 吃苹果;} { while (true) } { p(mutex);将香蕉放入盘子;v(banana);} } 返回
理发师var
waiting:integer; CHAIRS:integer; customers,barbers,mutex:semaphore; customers:=0; barbers:=0; waiting:=0; mutex:=1;
procedure barber: procedure customer begin begin P(mutex); while(true); if waiting<CHAIRS P(customers); begin P(mutex); waiting:=waiting+1; waiting:=waiting-1; V(customers); V(barbers); V(mutex); P(barbers); V(mutex); get_haircut(); cut_hair; end; end;
son() { while (true) { p(banana); p(mutex);从 盘子取香蕉;v(mutex); v(empty) 吃香蕉;} }
daugher() { while (true) { p(apple); p(mutex);从 盘子取苹果;v(mutex); v(empty) 吃苹果;} }
信号量机制例题: A、B两种产品
有一个仓库,可以存放A、B两种产品,但 要求: (1)每次只能存入一个产品( A或B) (2)-N<A产品数量-B产品数量<M
A、B两种产品
Semaphore mutex=1;sa=m-1;sb=n-1 Main() { while(true) { 取一个产品; if(取得是A产品) { p(sa); p(mutex); 将产品入库; v(mutex); v(sb); }
signal(wmutex); until false; end parend end
信号量机制例题:过独木桥
• 某条河上只有一座独木桥,以便行人过桥, 现在河的两边都有人要过桥,按照下面的 规则过桥,为了保证过桥安全,请用P,V 操作分别实现正确的管理。 过桥的规则:同一方向的可连续过桥,某方 向有人过桥时另一方向的人要等待。
Semaphore mutexn=1; countn互斥信号量 Semaphore mutexs=1; counts互斥信号量 Semaphore flag=1; Int countn=0; 北方正在过桥的车辆数 Int counts=0; 南方正在过桥的车辆数
Else { p(sb); p(mutex); 将产品入库; v(mutex); v(sa);
返回
信号量机制例题:阅览室
有一个阅览室,共有100个座位,读者进入 时必须在一张登记表上登记,该表为每一座 位列一表目,包括做好和读者姓名等,读者 离开时要削掉登记的信息。
阅览室
Semaphore mutex=1;seats=100;readers=0 getin() { while(true) { p(seats); p(mutex); 填写登记表; 进入阅览室读书; v(mutex); v(readers); } }
出租车
Semaphore:st=1,s=0, sc=1;
Customer () { p (sc); P (s); 乘坐离开; V (sc); V (st) }
taxi() { P (st); 停车; V (s); } 返回
信号量机制例题:爸爸,妈妈,儿子,女儿 • 桌上有一空盘,允许存放一只水果。 爸爸可向盘中放苹果,妈妈向盘中放 香蕉,儿子专等吃盘中的香蕉,女儿 专等吃盘中的苹果。
吸烟者Semaphore: a[0..2]=0;agent=1;
r,s:integer;