通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 2017年考研408计算机统考真题在线评测(附答案) 中有题目如下:
第1题
某进程中有3个并发执行的线程thread1、thread2和thread3,其伪代码如下所示。
//复数的结构类型定义 typedef struct { float a; float b; } cnum; cnum x, y, z; //全局变量 //计算两个复数之和 cnum add(cnum p, cnum q) { cnum s; s.a = p.a+q.a; s.b = p.b+q.b; return s; }
thread1 { cnum w; w = add(x, y); … } thread2 { cnum w; w = add(y, z), … }
thread3 { cnum w; w.a = 1; w.b = 1; z = add(z, w); y = add(y, w); … }
请添加必要的信号量和P、V(或wait( )、signal( ))操作,要求确保线程互斥访问临界资源,并且最大程度地并发执行。
答:
先找出线程对在各个变量上的互斥、并发关系。如果是一读一写或两个都是写,那么这就是互斥关系。每一个互斥关系都需要一个信号量进行调节。
semaphore mutex_y1=1;//mutex_y1用于thread1与thread3对变量y的互斥访问。(1分)
semaphore mutex_y2=1;//mutex_y2用于thread2与thread3对变量y的互斥访问。(1分)
semaphore mutex_z=1; //mutex_z用于变量z的互斥访问。(1分)
互斥代码如下:(5分)
thread1
{
cnum w; wait(mutex_y1);
w=add(x,y); signal(mutex_y1);
……
}
thread2
cnum w: wait(mutex_y2): wait(mutex_z);
w=add(y,z); signal(mutex_z); signal(mutex_y2);
thread3
cnum w;
w.a=1;
w.b=1;
wait(mutex_z); z=add(z,w); signal(mutex_z); wait(mutex_y1); wait(mutex_y2);
y=add(y,w); signal(mutex_y1); signal(mutex_y2);
所属试卷:2017年考研408计算机统考真题在线评测(附答案)
文件系统需占用部分外存空间记录空闲块位置。下列方法中,
下列叙述中正确的是( )。
若在程序中变量均已定义成int类型,且已赋大于1的值,
有以下程序:程序运行时不能输出10,20的语句是。
若有以下定义:则对x数组元素的正确引用是( )。
同一个列表对象中的元素类型可以各不相同。
只有通过切片访向元组中的无素,不能使用切片修改元组中的
编写程序,其功能为打印如下图所示图形。 * ** **
以下程序找出二维数组a中每行的最大值,并按一一对应的顺
假设输入的所有数的绝对值都不超过1000,将第26、2
函数rewind(fp)的作用是( )。
使用进程调度启动,指定30分钟后(或在2008年12月
结束后台进程的命令是______
下列那一个指令可以切换使用者身份( )
叙述Linux如何使用Windows系统硬盘(设备名为
安装Linux系统对硬盘分区时,必须有两种分区类 __
MYSQL查询语句中用 表示右然连接。
简称DBS,它是由数据库、硬件、软件、用户等组成
在命令提示符下,登录MySQL服务器的命令( )
以下聚合函数求个数的是( )
(第k小路径)给定一张.个点.条边的有向无环图,顶点编
功能:编写函数fun(str,i,n),从字符串str
for循环的三个表达式中间用分号相分隔,并且不能省略。
一个 1×8的方格图形(不可旋转)用黑、白两种颜色填涂
输出:( )
输入:IamacitizenofChina#输出:(
(最大子矩阵和)给出 m行n 列的整数矩阵,求最大的子
输入:83 2 5 11 12 7 4 10输出:__
( )属于 NP 类问题。
输入:62 5 3 11 12 4输出:
更多选择题
更多填空题
全国计算机等级考试《二级Java语言程序设计》真题(五)
全国计算机等级考试《二级Java语言程序设计》真题(四)
全国计算机等级考试《二级Java语言程序设计》真题(三)
全国计算机等级考试《二级Java语言程序设计》真题(二)
全国计算机等级考试《二级Java语言程序设计》真题(一)
计算机二级Python语言程序设计模拟试卷
Python第三方库