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