通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 2025年考研408计算机统考真题在线评测(附答案) 中有题目如下:
第1题
(本题 7 分)甲、乙、丙三人一起植树,甲负责挖树坑,乙负责将树苗放入树坑中并填土,丙负责为新种的树苗浇水。植树的步骤依次为:挖树坑、放树苗、填土和浇水。现有铁锹和水桶各 1 个,铁锹用于挖树坑和填土,水桶用于浇水。当树坑的数量小于 3 时,甲才可以挖树坑。假设初始时树坑的数量为 0,铁锹和水桶均可用。请定义尽可能少的信号量,用 wait ()、signal () 操作描述植树过程中三人之间的同步或互斥关系,并说明所用信号量的作用及其初值。
参考答案:
信号量 empty:作用是控制可挖树坑的最大数量,确保树坑总数不超过 3,以此同步甲的挖坑行为 —— 只有当已挖树坑数小于 3 时,甲才能执行挖坑操作,其初值为 3。
信号量 pit:用于表示已挖好且尚未被乙使用的树坑数量,承担甲(树坑生产者)和乙(树坑消费者)之间的同步功能 —— 甲挖好树坑后会触发该信号量,乙需等待该信号量可用才能进行放树苗操作,其初值为 0。
信号量 seedling:表示已完成放树苗和填土步骤、等待丙浇水的树苗数量,实现乙(栽种生产者)和丙(浇水消费者)之间的同步 —— 乙栽种完成后触发该信号量,丙需等待该信号量可用才能进行浇水操作,其初值为 0。
信号量 spade:用于实现铁锹的互斥使用,因为铁锹既供甲挖树坑,又供乙填土,同一时间只能由一人使用,通过该信号量避免资源竞争,其初值为 1。
甲(挖树坑)
while (true) { wait(empty); // 检查是否允许挖树坑(树坑数<3) wait(spade); // 申请铁锹(互斥使用) 挖树坑; // 核心操作 signal(spade); // 释放铁锹 signal(pit); // 挖好1个树坑,通知乙可使用 }
乙(放树苗 + 填土)
while (true) { wait(pit); // 等待甲挖好树坑 放树苗; // 无需竞争资源,直接执行 wait(spade); // 申请铁锹(填土用) 填土; // 核心操作 signal(spade); // 释放铁锹 signal(empty); // 树坑已使用,释放1个“可挖坑名额” signal(seedling); // 栽种完成,通知丙可浇水 }
丙(浇水)
while (true) { wait(seedling); // 等待乙栽种好树苗 浇水; // 水桶唯一且无竞争(仅丙使用),直接执行 }
所属试卷:2025年考研408计算机统考真题在线评测(附答案)
下列关于Java语言中线程的叙述中,正确的是( )。
给定程序MODI1.C中函数fun功能是:将长整型数中
下列不属于软件工程3个要素的是( )。
以下叙述正确的是( )。
以下叙述中正确的是( )。
以下函数的功能是计算a的n次方作为函数值返回:为实现上
有以下程序:运行时,若输入1 2 3 4 5 0<回车
有如下程序:执行这个程序输出“#”号的个数为( )。
已知函数定义def demo(x,y,op): ret
使用记事本程序也可以打开二进制文件,只不过无法正确识别
#编写函数,求任意整数的二进制形式中最后连续0的个数。
Python扩展库____________支持Exce
已知列表x=[1,2],执行语句y=x[:]后,表达式
已知列表x中包含超过5个以上的元素,那么表达式x=x[
从键盘输入一个字符串a,并在a串中的最大元素后边插入字
假设有如下代码:缺不能使float类型变量k得到正确数
由N个有序整数组成的数列已放在一堆数组中,给定程序MO
假设linux分配给光驱的设备名是/dev/cdrec
创建主键约束(PRIMARY KEY)或唯一约束(UN
算法的优劣与算法描述语言无关,但与所用计算机有关。
二叉树中每个结点至多有两个子结点,而对一般树则无此限制
假设输入的 x、y 均是不超过 15 的自然数,程序总
以下程序段要求从键盘输入字符,当输入字母为'Y' 时,
预处理命令行都必须以_____号开始。
有以下程序程序的运行结果是
输出:( )
以下不是微软公司出品的软件是 ( )。
以下竞赛活动中历史最悠久的是( )
输入:6 6 5 5 3 输出:___________
在下列关于计算机算法的说法中,不正确的是( )。
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2