列表

详情


阅读下列说明和程序,回答问题1至问题3,将答案填入答题纸的对应栏内。
【说明】
在开发某嵌入式系统时,设计人员根据系统要求,分别编写了如下程序,其中:
【程序1】:实现两个变量的值的互换;
【程序2】:完成某功能的C语言程序;
【程序3】和【程序4】:是P、V操作的形式化定义,设S为信号量。在多道程序系统中,进程是并发执行的。这些进程间存在着不同的相互制约关系,主要表现为同步和互斥两个方面。信号量是解决进程间同步与互斥的有效方法。
【程序1】


【程序2】


【程序3】
P操作的形式化定义


【程序4】
V操作的形式化定义:


【问题1】(6分)
执行【程序1】后,没有能够实现两个变量值的交换,为什么?请修改上述函数,实现两个变量值的交换,要求函数无返回值,形式为:void swap(…)。请将答案填写在答题纸中对应的栏目。
【问题2】(3分)
请问【程序2】运行结果是什么?
【问题3】(6分)
请简述什么是临界资源?什么是临界区?
请完成【程序3】和【程序4】的形式化定义,将应填入(n)处的内容写在答题纸的对应栏中。

参考答案:

【问题1】
两个变量不能交换值的原因:
因为函数是传值的,函数形参值的交换,并不影响到实参的值的变化。
正确的函数编写如下(下面只是范例,变量名称不作要求):


【问题2】
第一次输出:fun(5)=5
第二次输出:fun(7)=13
第三次输出:fun(9)=34
【问题3】
临界资源:一次只能使一个进程访问的资源称为临界资源。
临界区:进程中访问临界资源的那段代码称为临界区。
(1)S--
(2)S<0
(3)S++
(4)S<=0

详细解析:

本题考查嵌入式C/C++语言编程基础知识。
【问题1】
考查大家对函数调用的传参和传值的概念的理解程度。
函数swap采用值传递,虽然将形参n1和n2交换了,但是并不影响到实参。需要将值传递改成指针传递就可以了。
【问题2】
本题考查大家对程序for循环的计算过程。
【问题3】
本题考查大家对PV操作的理解。牵涉到的概念有:
临界资源:诸进程间需要互斥方式对其进行共享的资源,如打印机、磁带机等
临界区:每个进程中访问临界资源的那段代码称为临界区。
信号量:是一种特殊的变量。
P、V操作的形式化描述如下:

上一题