假设系统中有m个同类的互斥资源,当n个进程共享这m个互斥资源时,每个进程的最大需求数是w。以下()情况系统不会产生死锁。(多选)
A. m=4,n=3,w=2
B. m=4,n=2,w=3
C. m=5,n=2,w=3
D. m=5,n=3,w=2
查看答案
在生产流水线上有三个工序:取件(getter),传送(transfer),加工(processor)。刚开始可以取件,才能通过传送带传送,传送带送到加工的位置才能进行加工,然后才可以开始下一轮的取件。试用信号量的P、V操作实现getter、transfer、processor之间的同步与互斥关系,补全下面代码中的空白。每个空白计1分。 信号量 g_mutex = (空白1);// 指示可取件的信号量,初始值设定 信号量 t_mutex = (空白2);// 指示可传送访的信号量,初始值设定 信号量 p_mutex = (空白3);// 指示可加工的信号量,初始值设定 void getter () { while( true ) { P(g_mutex); 取件工序操作 V((空白4) ) } } void transfer () { while( true ) { P((空白5)); 传送工序操作 V((空白6) ) } } void processor () { while( true ) { P((空白7)); 加工工序操作 V((空白8) ) } } void main() { 创建getter进程 创建transfer进程 创建processor进程 其他处理 }
假设有一座独木桥,同一方向的行人可以连续过桥,而当某一方向有人过桥时,另一方向的行人必须等待;直到某一方向无人过桥时,另一方向的行人才可以过桥。用信号量解决该同步互斥问题,其中初始条件设置和其中一方行人的进程代码如下,补全代码中的空白。(每空计1分) int ACounter = 0; int BCounter = 0; //ACounter和BCounter分别表示从A、B两方向过桥的人数 semaphore bridge = ____(空白1)____; //实现对桥的互斥共享 semaphoreAMutex = BMutex = ____(空白2)____; //对Acounter和BCounter的互斥共享 PA(){ wait(AMutex); if (ACounter == ____(空白3)____) wait (____(空白4)____); ____(空白5)____; signal(____(空白6)____); 使用浴室; wait(AMutex); ACounter--; if(ACounter == 0)signal(bridge); signal(____(空白7)____); } //PB()进程与PA()进程类似,只需将“A”与“B”互换
校园内有一个男女共用的浴室。学校颁布规定:当有一个女生在浴室里,那么其他女生可以进入,但是男生不行,反之亦然。在浴室门上有个滑动标签,标示了浴室当前的三种使用状态之一:1.浴室空;2.有女生在使用;3.有男生在使用。用信号量解决该同步互斥问题,其中初始条件设置和一个女生进程的伪代码如下,补全代码中的空白。int girlCounter = 0; int boyCounter = 0; semaphore empty = ____(空白1)____; //控制浴室的进入 semaphore girlMutex = boyMutex = ____(空白2)____; //对两个counter互斥共享 girl(){ wait(____(空白3)____); girlCouter ++; if (girlCounter == ____(空白4)____) wait (____(空白5)____); signal(girlMutex); 使用浴室; wait(girlMutex); ____(空白6)____; if(girlCounter == 0)signal(empty); signal(____(空白7)____); } //boy()进程与girl()进程类似,只需将“girl”与“boy”字样互换。
桌上有一只盘子,最多可容纳2个水果,每次只能放入或取出1个水果。爸爸专向盘中放苹果,妈妈专向盘中放橘子;一个儿子专等吃盘子中的橘子,一个女儿专等吃盘中的苹果。试用信号量的P、V操作实现爸爸、妈妈、儿子、女儿之间的同步与互斥关系,补全下面代码中的空白。每个空白计1分。 Semaphore sEmpty = ____; Semaphore sApple = ____; Semaphore sOrange =____; Semaphore sMutex =____; void father() { while(true) { P(____); P(____); 向盘中放苹果 V(sMutex) V(sApple) } } void mother() { while(true) { P(sEmpty); P(sMutex); 向盘中放橘子 V(sMutex) V(____) } } void son( ) { while(true) { P(sOrange); P(sMutex); 从盘中取橘子 V(sMutex); V(sEmpty); 吃橘子 } } void daughter( ) { while(true) { P(____); P(sMutex); 从盘中取苹果 V(sMutex); V(sEmpty); 吃苹果 } }