实验一 并发程序设计实验报告1

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();}

}

执行结果:

实验心得体会:我的底子很差,做起实验很吃力在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在老师讲解时就会听不懂,这将使你在做实验时的难度加大,浪费做实验的宝贵时间.比如运行时候,你要清楚各个运行的指令,如果你不清楚,在做实验时才去摸索,这将使你极大地浪费时间,使你事倍功半.做实验时,一定要耐心仔细每个细节弄清楚,弄明白,实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做.做实验时,老师还会根据自己的亲身体会,将一些课本上没有的知识教给我们,拓宽我们的眼界,使我们认识到这门课程在生活中的应用是那么的广泛.

通过这次测试技术的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅.

相关文档
最新文档