欢迎来到天天文库
浏览记录
ID:41259924
大小:457.19 KB
页数:12页
时间:2019-08-20
《实验二多线程应用程序设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、成绩信息与通信工程学院实验报告课程名称:嵌入式系统原理与应用实验题目:多线程应用程序设计指导教师:班级:学号:学生姓名:一、实验目的和任务1.掌握VI编译环境。2.掌握GCC编译命令。3.掌握多个文件共同编译方法。4.掌握GDB调试命令。5.了解多线程程序设计的基本原理。6.学习pthread库函数的使用。二、实验设备7.硬件:PC机8.软件:LINUX操作系统、虚拟机三、实验内容及原理1.在VI编辑器里编写两个文件(其中一个为主程序,实现显示“hello,linuxworld,Iam1405014XXXXXX”,,一个为子程序,实现1~n的乘法),为
2、其书写头文件,共同编译为可执行文件,执行,观察运行结果。学习书写MAKEFILE文件,编译,执行,观察结果。利用GCC编译(加参数-g)为可执行文件,利用GDB调试,学习GDB调试命令。1.编写多线程程序设计。编译并运行,观察结果。(可参照课件或实验指导书)一、实验步骤或程序流程1.Gcc编译实验1)编写实验代码:图3.1实验主程序图3.2实验子程序2)编写Makefile文件:图3.3Makefile文件1)Make执行Makefile文件,生成可执行程序并运行:图3.4执行2)Gdb调试运行:图3.5gdb调试显示代码图3.6gdb调试断点运行图3
3、.7gdb调试逐步运行1.多线程程序设计:1)对实验代码进行gcc编译:图3.7gcc编译生成可执行文件2)运行结果:图3.8程序运行结果一、实验数据及程序代码1.Gcc编译实验:1)主程序:#include"stdio.h"#include"my2.h"intmain(){printf("hello.Linuxworld.Iam1405014232zzm");my2();}2)实验子程序:#include"my2.h"#include"stdio.h"voidmy2(){inti=1;floats=1intN;printf("Pleaseinpu
4、tn:");scanf("%d",&N);for(i,i<=n,i++)s*=i;printf("result:");printf("%f",s);}3).h头文件:#ifndef_MY2_H#define_MY2_Hintmain();voidmy2();#endif4)makefile执行文件:zzmgo:my2.omy1.ogcc-ozzmgomy2.omy1.omy1.o:my1.cmy2.hgcc-cmy1.cmy2.o:my2.cmy2.hgcc-cmy2.cclean:rm-rfmy1.omy2.ozzmgo1.多线程程序设计:#in
5、clude#include#include#include"pthread.h"#defineBUFFER_SIZE16/*Circularbufferofintegers.*/structprodcons{intbuffer[BUFFER_SIZE];/*theactualdata*/pthread_mutex_tlock;/*mutexensuringexclusiveaccesstobuffer*/intreadpos,writepos;/*positionsforreadingandwrit
6、ing*/pthread_cond_tnotempty;/*signaledwhenbufferisnotempty*/pthread_cond_tnotfull;/*signaledwhenbufferisnotfull*/};/*--------------------------------------------------------*//*Initializeabuffer*/voidinit(structprodcons*b){pthread_mutex_init(&b->lock,NULL);pthread_cond_init(&b->
7、notempty,NULL);pthread_cond_init(&b->notfull,NULL);b->readpos=0;b->writepos=0;}/*--------------------------------------------------------*//*Storeanintegerinthebuffer*/voidput(structprodcons*b,intdata){pthread_mutex_lock(&b->lock);/*Waituntilbufferisnotfull*/while((b->writepos+1
8、)%BUFFER_SIZE==b->readpos){printf("waitfornotfu
此文档下载收益归作者所有