通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 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计算机统考真题在线评测(附答案)
关键字unsigned不能修饰的类型是。
对于题 43 中的计算机M,C 语言程序P 包含的语句
使用 turtle 库的 turtle.fd函数和
有以下程序程序运行后的输出结果是( )。
有两个关系R和T如下:则由关系R得到关系T的操作是(
以下叙述中正确的是( )。
已有变量定义语句double=5.0,p; int n
语句int(*ptr)的含义是( )。
EIA RS232C的电气指标规定,信号“1”的额定电
下列选项中,不是如下有向图的拓扑序列的是( )。
欲移除 bind 套件,应用下列那一指令( )
参照完整性要求外码的值必须取 ,或等于被参照关系
二叉树是度为2的树。
在下列网络互联设备中,哪一个设备能够在LAN之间存储转
设线性表L=(a1 ,a2,a3,···,an-2,a
(8分)进程P通过系统调用请求从键盘读入一个字符。题目
在C程序中,只能给指针变量赋NULL值和_____值。
功能:判断一个整数w的各位数字平方之和能否被5整除,可
对于入栈顺序为a,b,c,d,e的序列,下列( )不是
如果需要打开一个已经存在的非空文件"FILE"并进行修
下列叙述中错误的是
输入1:6 10 1 6 4 5 3 2输出1:___
输入:QuanGuoLianSai输出:( )
(二叉查找树)二叉查找树具有如下性质:每个节点的值都大
(笛卡尔树 )对于一个给定的两两不等的正整数序列,
(子矩阵) 给输入一个 n1*m1 的矩阵 a,和 n
有 6 个城市,任何两个城市之间都有一条道路连接, 6
输入:6 6 5 5 3 输出:___________
设A=B=true,C=D=false,以下逻辑运算表
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2