实验二-多线程应用程序设计

  • 格式:docx
  • 大小:468.22 KB
  • 文档页数:18

下载文档原格式

  / 18
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二-多线程应用程序设计

信息与通信工程学院实验报告

课程名称:嵌入式系统原理与应用

实验题目:多线程应用程序设计指导教师:

班级:学号:学生姓名:

一、实验目的和任务

1.掌握VI编译环境。

2.掌握GCC编译命令。

3.掌握多个文件共同编译方法。

4.掌握GDB调试命令。

5.了解多线程程序设计的基本原理。

6.学习 pthread 库函数的使用。

二、实验设备

7.硬件:PC机

8.软件:LINUX操作系统、虚拟机

三、实验内容及原理

1.在VI编辑器里编写两个文件(其中一个为主程序,实现显示“hello,linux world,

I am 1405014XXX XXX”,,一个为子程序,实现1~n的乘法),为其书写头文件,共同

编译为可执行文件,执行,观察运行结果。学习书写MAKEFILE文件,编译,执行,观察结果。利用GCC 编译(加参数-g)为可执行文件,利用GDB调试,学习GDB调试命令。

2.编写多线程程序设计。编译并运行,观察结果。(可参照课件或实验指导书)

四、实验步骤或程序流程

1.Gcc编译实验

1)编写实验代码:

图3.1实验主程序

图3.2实验子程序

2)编写Makefile文件:

图3.3 Makefile文件3)Make执行Makefile文件,生成可执行程序并运行:

图3.4 执行

4)Gdb调试运行:

图3.5 gdb调试显示代码

图3.6 gdb调试断点运行

图3.7 gdb调试逐步运行

2.多线程程序设计:

1)对实验代码进行gcc编译:

图3.7gcc编译生成可执行文件2)运行结果:

图3.8程序运行结果

五、实验数据及程序代码

1.Gcc编译实验:

1)主程序:

#include "stdio.h"

#include "my2.h"

int main()

{

p rintf("hello.Linux world.I am 1405014232 zzm\n");

m y2();

}

2)实验子程序:

#include "my2.h"

#include "stdio.h"

void my2()

{

i nt i=1;

float s=1

i nt N;

p rintf("Please input n:\n");

s canf("%d",&N);

f or(i,i<=n,i++)

s*=i;

p rintf("result:");

p rintf("%f",s);

}

3).h头文件:

#ifndef _MY2_H

#define _MY2_H

int main();

void my2();

#endif

4)makefile执行文件:

zzmgo: my2.o my1.o

gcc -o zzmgo my2.o my1.o my1.o: my1.c my2.h

gcc -c my1.c

my2.o:my2.c my2.h

gcc -c my2.c

clean:

r m -rf my1.o my2.o zzmgo

1.多线程程序设计:

#include

#include

#include

#include "pthread.h"

#define

BUFFER_SIZE 16

/* Circular buffer of integers. */

struct prodcons {

int buffer[BUFFER_SIZE];

/* the actual data

*/

pthread_mutex_t lock;

/* mutex ensuring exclusive access to buffer */

int readpos, writepos;

/* positions for reading and writing */

pthread_cond_t notempty;

/* signaled when buffer is not empty */ pthread_cond_t notfull;

/* signaled when buffer is not full */ };

/*--------------------------------------------------------* /

/* Initialize a buffer */

void init(struct prodcons * b)

{

pthread_mutex_init(&b ->lock, NULL);

pthread_cond_init(&b->notempty, NULL);

pthread_cond_init(&b->notfull, NULL);

b->readpos = 0;

b->writepos = 0;

}

/*--------------------------------------------------------* /

/* Store an integer in the buffer */

void put(struct prodcons * b, int data) {

p thread_mutex_loc k(&b->lock);

/* Wait until buffer is not full */

while