通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 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计算机统考真题在线评测(附答案)
阅读下列代码:在下划线处应填入的修饰符是( )。
编写代码,获得用户输入的一段文字并垂直输出。参考答案:
给定程序中,函数fun的功能是:将a所指4×3矩阵中第
给定程序MODI1.C中函数fun的功能是:判断一个整
有以下程序程序运行后的输出结果是( )。
若有定义语句:执行了px=&x;py=&y;之后,正确
有如下程序:执行这个程序输出“#”号的个数为( )。
表达式(i**2 for i in range(100
已知x={'a':'b','c':'d'},那么表达式
已知x =[1,2],那么执行语句 x[0:1]=[3
已有变量定义语句double=5.0,p; int n
在一个C源程序文件中,若要定义一个只允许本源文件中所有
当键盘输入18时,下面程序运行结果是_________
综合业务数字网的缩写是( )
数据库设计的四个阶段是:需求分析,概念设计,逻辑设计,
若有定义语句int a, b;double x;则下列
要使得名为fido的文件具有如下权限-r-xr-x—x
网络管理的重要任务是:_____和________。
在创建Linux分区时,一定要创建( )两个分区
创建表语句中表示定义自增约束的子句是
MySQL客户端程序 _____ 用于从数据备份文件中
视图定义时algorithm参数值为 _____ 表示
八进制数123456708 和076543218的和为
(8 分)某计算机用硬盘作为启动盘,硬盘第一个扇区存放
原型化方法是软件开发中一类常用的方法,它与结构化方法相
主机168.16.84.24/20 所在子网的最小可分
预处理命令行都必须以_____号开始。
把 8个同样的球放在 5个同样的袋子里,允许有的袋子空
设某算法的计算时间表示为递推关系式 T(n)=T(n-
原地排序是指在排序过程中 (除了存储待排序元素以外的)
更多选择题
更多填空题
全国计算机等级考试《二级Java语言程序设计》真题(五)
全国计算机等级考试《二级Java语言程序设计》真题(四)
全国计算机等级考试《二级Java语言程序设计》真题(三)
全国计算机等级考试《二级Java语言程序设计》真题(二)
全国计算机等级考试《二级Java语言程序设计》真题(一)
计算机二级Python语言程序设计模拟试卷
Python第三方库