实验一 并发程序设计实验报告1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一并发程序设计实验报告
1.目的
在单处理器环境下,实现多任务的核心是并发程序设计,进程的并发执行提高了CPU 的利用率,使得CPU与设备并行、设备与设备并行成为可能。但并发执行也存在许多单任务中所没有的问题,其中之一是互斥和同步的控制。
2.要求
题目:在BACI环境下,对程序并发执行的实验:(1)没有控制时正确的程序执行的结果不正确;(2)BACI中PV操作的并发控制的实现。
内容:
第一题
程序:
semaphore s=1;
int count=100;
void pa()
{
int x;
p(s);
x=count;
x=x+1;
count=x;
v(s);
}
void pb()
{
int y;
p(s);
y=count;
y=y-1;
count=y;
v(s);
}
void main()
{
cout<<"begin count="< cobegin{pa();pb();} count<<"end count="< } 程序运行结果: 第二题: (1)一开始堆栈的初始值都为-1。(2)原程序执行3次的截图 (3)可见该程序是错的。 (4)修改完的代码: int stack[20]; int top; semaphore s; void getspace() { int x; p(s); x=stack[top]; top--; cout<<" Out : "< v(s); } void release(int ad) { p(s); top++; stack[top]=ad; cout<<" In : "< v(s); } void main() { int i; initialsem(s,1); for(i=0;i<20;i++) stack[i]=-1; stack[0]=0; stack[1]=156; stack[2]=254; stack[3]=129; stack[4]=23; top=4; cobegin{getspace();release(100);} cout<<"Top ="< for(i=0;i<=top;i++) cout<<"Stack["< (1)修改完的执行结果: 第三题: 程序: semaphore s; semaphore n1; semaphore n2; semaphore s3; int x; void R(){ p(empty); cout<<"x="; cin>>x; if(x%2==0) v(n2); else v(n1);} } void W1(){ p(n1); p(s3); cout<<"W1 print x="< v(empty); } void W2(){ p(n2); p(s3); cout<<"W2 print x="< v(empty); } void main(){ initialsem(empty,1); initialsem(n1,0); initialsem(n2,0); initialsem(s3,1); cobegin{R();W1();W2();} } 执行结果: 实验心得体会:我的底子很差,做起实验很吃力在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间.比如运行时候,你要清楚各个运行的指令,如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半.做实验时,一定要耐心仔细每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做.做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛. 通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅.