通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 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计算机统考真题在线评测(附答案)
下列关于抽象类的表述中正确的是。
下列方法中可用于定义线程体的是( )。
下列数据结构中,不适合 直接使用折半查找的是 ( )。
编写程序输入一个可能带空格的字符串,查找字符'z'出现
以下叙述中正确的是( )。
有以下程序程序执行后的输出结果是( )。
以下不是C语言字符型或字符串常量的是。
己知x是一个列表对象,那么执行语句了y=x[:]之后表
以下程序的输出结果不可能的选项是( )。
lambda表达式中可以使用任意复杂的表达式,但是必须
函数fun的功能是:将s所指字符串中ASCI值为偶数的
以下程序输出结果是_________。
某服装店经营套服且单件出售,若一次购买不少于50套,则
输入的a[i]必须全为正整数,否则程序将陷入死循环。
以下程序的功能是:借助指针变量找出数组元素中最大值所在
赋予所有用户读和写backup.tar.gz文件的权限
如果两个实体之间具有M:N联系,则将它们转换为关系模型
从事物的特性到计算机中的数据表示,经历的三个领域是现实
Armstrong公理系统的三条推理规则是自反律、增广
设有一表示算术表达式的二叉树(见下图),它所表示的算术
下面程序的时间复杂度为。
有三个表,它们的记录行数分别是10行、2行和6行,三个
假定主存地址为32位,按字节编址,指令Cache和数据
若计算机主存地址为 32 位,按字节编址,Cache
若有定义:接着顺序执行下列语句后,变量c中的值是___
设(k=a=5,b=3,a*b),则表达式的值为___
有三个关系R,S和T如下图所示,则由关系R和S得到关系
输入: 18输出: ___________
( )就是把一个复杂的问题分成两个或者更多的相同或相似
无向图 G 有 7 个顶点,若不存在奇数条边构成的简单
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2