实验二-多线程应用程序设计
- 格式:docx
- 大小:468.22 KB
- 文档页数:18
实验二-多线程应用程序设计
成
绩
信息与通信工程学院实验报告
课程名称:嵌入式系统原理与应用
实验题目:多线程应用程序设计指导教师:
班级:学号:学生姓名:
一、实验目的和任务
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