通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 2019年考研408计算机统考真题在线评测(附答案) 中有题目如下:
第1题
有 n(n≥3)位哲学家围坐在一张圆桌边,每位哲学家交替地就餐和思考。在 圆桌中心有 m(m≥1)个碗,每两位哲学家之间有一根筷子。每位哲学家必须取到一个碗和两 侧的筷子后,才能就餐,进餐完毕,将碗和筷子放回原位,并继续思考。为使尽可能多的哲学 家同时就餐,且防止出现死锁现象,请使用信号量的 P、V 操作[wait()、signal()操作]描述上 述过程中的互斥与同步,并说明所用信号量及初值的含义。
【答案解析】 回顾传统的哲学家问题,假设餐桌上有 n 个哲学家、n 根筷子,那么可以用这种方法避免死 锁:限制至多允许 n-1 个哲学家同时“抢”筷子,那么至少会有 1 个哲学家可以获得两根筷 子并顺利进餐,于是不可能发生死锁的情况。本题可以用碗这个限制资源来避免死锁:当碗 的数量 m 小于哲学家的数量 n 时,可以直接让碗的资源量等于 m,确保不会出现所有哲学家 都拿一侧筷子而无限等待另一侧筷子进而造成死锁的情况;当碗的数量 m 大于等于哲学家的 数量 n 时,为了让碗起到同样的限制效果,我们让碗的资源量等于 n-1,这样就能保证最多只 有 n-1 个哲学家同时进餐,所以得到碗的资源量为 min{ n-1, m}。在进 PV 操作时,碗的资源 量起限制哲学家取筷子的作用,所以需要先对碗的资源量进行 P 操作。具体过程如下:
// 信号量 semaphore bowl; // 用于协调哲学家对碗的使用 semaphore chopsticks[n]; // 用于协调哲学家对筷子的使用 for(int i=0; i<n; i++) chopsticks[i]=1; // 设置两个哲学家之间筷子的数量 bowl=min(n-1,m); //bowl ≤ n-1,确保不死锁 CoBegin while(TRUE) { // 哲学家 i 的程序 思考; P(bowl); // 取碗 P(chopsticks[i]); // 取左边筷子 P(chopsticks[(i+1)%n]); // 取右边筷子 就餐; V(chopsticks[i]); V(chopsticks[(i+1)%n]); V(bowl); } CoEnd
所属试卷:2019年考研408计算机统考真题在线评测(附答案)
正方形绘制。使用 turtle 库,绘制一个边长值为
人员的记录由编号和出生年、月、日组成,N名人员的数据已
若有定义语句:在其后执行语句:z=0.9+x/y;则z
以下语句中存在语法错误的是( )。
若有以下程序则程序的输出结果是。
以下定义数组的语句中错误的是( )。
有以下程序段:程序的输出结果是( )。
正则表达式元字符___________用来表示该符号前
已知字典 x= {i:str(i+3) for i i
已知x={1:1,2:2},那么执行语句x[3]=3之
已知x={1:1,2:2},那么执行语句x[2]=4之
下面程序段中循环体的执行次数是___________。
已知,计算f(n)的C语言函数f1如下:将f1中的in
已知无向图G含有16条边,其中度为4的顶点个数为3,度
文件exer1的访问权限为rw-r--r--,现要增加
怎样了解您在当前目录下还有多大空间?
简称DBS,它是由数据库、硬件、软件、用户等组成
数据库应用系统设计的需求分析阶段生成的文档主要有数据字
下面哪种视图可以更新数据
假设输入的 x、y 均是不超过 15 的自然数,程序总
运算符的级别由高向低依次为!->算术运算符->逻辑运算
功能:计算出k以内最大的10个能被13或17整除的自然
设(k=a=5,b=3,a*b),则k值为_____。
请编写函数proc,其功能是:判断形参n中的正整数是几
以下不能将s所指字符串正确复制到t所指存储空间的是
软件生命周期是指
输出:( )
某系统自称使用了一种防窃听的方式验证用户密码。密码是
(过河问题) 在一个月黑风高的夜晚,有一群人在河的右岸
在 C 语言中,判断 a 等于 0 或b 等于 0 或
更多选择题
更多填空题
计算机二级Python语言程序设计模拟试卷
Python第三方库
2025年考研408计算机统考真题在线评测(附答案)
Python标准库
Python函数
Python文件
Python组合数据类型