程序实验2:11-多线程编程---实验报告

上传人:F****n 文档编号:99518214 上传时间:2019-09-19 格式:DOC 页数:20 大小:497KB
返回 下载 相关 举报
程序实验2:11-多线程编程---实验报告_第1页
第1页 / 共20页
程序实验2:11-多线程编程---实验报告_第2页
第2页 / 共20页
程序实验2:11-多线程编程---实验报告_第3页
第3页 / 共20页
程序实验2:11-多线程编程---实验报告_第4页
第4页 / 共20页
程序实验2:11-多线程编程---实验报告_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《程序实验2:11-多线程编程---实验报告》由会员分享,可在线阅读,更多相关《程序实验2:11-多线程编程---实验报告(20页珍藏版)》请在金锄头文库上搜索。

1、嵌入式操作系统多线程-实验报告 (11-多线程编程)程序实验二:11-多线程编程实验专业班级 实验日期 5.21 姓名 学号 实验一(p284:11-thread.c)1、软件功能描述创建3个线程,让3个线程重用同一个执行函数,每个线程都有5次循环,可以看成5个小任务,每次循环之间会有随即等待时间(1-10s)意义在于模拟每个任务到达的时间是随机的没有任何的特定规律。2、程序流程设计3部分程序代码注释(关键函数或代码)#include#include #include #define T_NUMBER 3#define P_NUMBER 5#define TIME 10.0void *thrd

2、_func(void *arg ) int thrd_num=(int)arg; int delay_time =0; int count =0; printf(Thread %d is staraingn,thrd_num); for(count=0;countP_NUMBER;count+) delay_time =(int)(rand()*TIME/(RAND_MAX)+1; sleep(delay_time); printf(tTH%d:job%d delay =%dn,thrd_num,count,delay_time); printf(%d finishedn,thrd_num);

3、 pthread_exit(NULL); int main() pthread_t threadT_NUMBER; int no=0,res; void * thrd_ret; srand(time(NULL); for(no=0;noT_NUMBER;no+) res=pthread_create(&threadno,NULL, thrd_func,(void*)no); if(res!=0) printf(Creay th %d faildn,no); exit(res); printf(successnwaitingn); for(no=0;noT_NUMBER;no+) res=pth

4、read_join(threadno,&thrd_ret); if(!res) printf(t %d joinedn,no); else printf(T %djoined faildn,no); return 0;4编译、运行方法及结果(抓屏)5结果分析由运行结果可以看出,创建线程、释放资源按照顺序,而每个线程的运行和结束是独立与并行的。实验二(p287: 11-thread_mutex.c)1、软件功能描述在试验1的基础上通过互斥锁,使原本独立,无序的多个线程能够按顺序进行2、程序流程设计3部分程序代码注释(关键函数或代码)#include#include#include#define

5、THREAD_NUMBER 3 /*线程数*/#define REPEAT_NUMBER 3 /*每个线程的小任务数*/#define DELAY_TIME_LEVELS 10.0 /*小任务间的最大时间间隔*/pthread_mutex_t mutex; void *thrd_func(void *arg) /线程函数例程 int thrd_num = (int)arg; int delay_time = 0, count = 0; int res; /互斥锁上锁 res = pthread_mutex_lock(&mutex); if(res) printf(Thread %d is st

6、artingn, thrd_num); pthread_exit(NULL); printf(Thread %d is startingn, thrd_num); for(count = 0; count REPEAT_NUMBER; count+) delay_time = (int)(rand() * DELAY_TIME_LEVELS/(RAND_MAX) + 1; sleep(delay_time); printf(tThread %d: job %d delay = %dn,thrd_num, count, delay_time); printf(Thread %d finished

7、n, thrd_num); pthread_exit(NULL); int main(void) pthread_t threadTHREAD_NUMBER; int no = 0, res; void * thrd_ret; srand(time(NULL); pthread_mutex_init(&mutex, NULL); for(no = 0; no THREAD_NUMBER; no+ ) res = pthread_create(&threadno, NULL, thrd_func, (void*)no); if(res != 0) printf(Create thread %d

8、failedn, no ); exit(res); printf(Create threads successn Waiting for threads to finish.n);/*这里的问题很奇怪,按照书上程序敲打,出现的线程首先是2而非0,没有按照书上所说:与创建顺序相同,但是在这里体现了互斥性,由于后面的释放资源程序从0开始,而一开始为线程2占用资源,所以无法释放资源,导致程序卡死,最后修改为先释放线程2的资源,之后则可以依次显示*/ for(no = 2; no THREAD_NUMBER; no-) res = pthread_join(threadno,&thrd_ret); i

9、f(!res) printf(Thread %d joinedn, no); else printf(Thread %d join failedn, no); pthread_mutex_unlock(&mutex); pthread_mutex_destroy(&mutex); return 0;4编译、运行方法及结果(抓屏)5结果分析实验结果体现了互斥性,3个线程有序运行。实验三(P291:11-thread_sem.c)1、软件功能描述该程序在实验1的基础上,用信号量同步机制实现3个线程的有序执行,利用pv操作来控制执行顺序,达到执行的顺序和创建的顺序刚好相反。2、程序流程设计3部分程序

10、代码注释(关键函数或代码)#include#include#include#include#define THREAD_NUMBER3#define REPEAT_NUMBER3#define DELAY_TIME_LEVELS10.0sem_t semTHREAD_NUMBER; void *thrd_func(void *arg)int thrd_num = (int)arg; int delay_time = 0; int count = 0; sem_wait(&semthrd_num); printf(Thread %d is startingn,thrd_num); for(cou

11、nt = 0; count REPEAT_NUMBER; count+)delay_time = (int)(rand() * DELAY_TIME_LEVELS/(RAND_MAX)+1; sleep(delay_time); printf(tThread %d: job %d delay = %dn,thrd_num, count, delay_time); printf(Thread %d finishedn, thrd_num); pthread_exit(NULL); int main(void)pthread_t threadTHREAD_NUMBER; int no = 0,res; void * thrd_ret; srand(time(NULL); for(no = 0; no THREAD_NUMBER; no

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号