预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共31页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

嵌入式操作系统—多线程-实验报告 程序实验2:多线程编程实验 实验周次9实验日期2014/4/20姓名张括学号20112435 实验一(p284:11-thread.c) 1、软件功能描述 创建线程实际上就是确定调用该线程函数的入口点,通常使用的函数是pthread_create()。在线程创建以后,就开始运行相关的线程函数,在该函数运行完之后,该线程也就退出,这是线程退出一种方法。另一种退出线程的方法是使用函数pthread_exit(),这是线程的主动行为。 本实验程序创建了3个线程,这3个线程重用一个函数,每个线程循环5次,随机等待1-10s时间。 2、程序流程设计 任务完成? 所有线程执行完成? 是 是 结束所有线程 结束 否 否 开始 创建线程 定义创建线程数和每个线程中任务数 随机运行线程任务 3.部分程序代码注释(关键函数或代码) …… /*thread.c*/ #include<stdio.h> #include<stdlib.h> #include<pthread.h> #defineTHREAD_NUMBER 3 #defineREPEAT_NUMBER 5 #defineDELAY_TIME_LEVELS 10.0 void*thrd_func(void*arg) { intthrd_num=(int)arg; intdelay_time=0; intcount=0; printf("Thread%disstarting\n",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%ddelay=%d\n",thrd_num,count,delay_time); } printf("Thread%dfinished\n",thrd_num); pthread_exit(NULL); } intmain(void) { pthread_tthread[THREAD_NUMBER]; intno=0,res; void*thrd_ret; srand(time(NULL)); for(no=0;no<THREAD_NUMBER;no++) { res=pthread_create(&thread[no],NULL,thrd_func,(void*)no); if(res!=0) { printf("Createthread%dfailed\n",no); exit(res); } } printf("Createtreadssuccess\nWaitingforthreadstofinish...\n"); for(no=0;no<THREAD_NUMBER;no++) { res=pthread_join(thread[no],&thrd_ret); if(!res) { printf("Thread%djoined\n",no); } else { printf("Thread%djoinfailed\n",no); } } return0; } …… 4.编译、运行方法及结果(抓屏) 5.结果分析 …… 通过上述实验,根据运行结果可以看出程序中创建了三个线程,且每个线程中的5个任务循环等待时间是随机的,这样任务到达的时间也是随机的,所以线程2中的任务可能会比线程1的任务线执行,即线程2可能会比线程1先运行结束。 实验二(p287:11-thread_mutex.c) 1、软件功能描述 由于线程共享进程的资源和地址空间,因此在对这些资源进行操作的时候,必须考虑到线程间资源访问的同步与互斥问题。本实验主要利用互斥锁机制,保证让每个线程对共享资源按顺序进行原子操作。用一种简单的加锁方法来控制对共享资源的原子操作。 互斥锁只有两种状态:上锁和解锁,可以把互斥锁看作某种意义上的全局变量。同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望访问一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。 互斥锁保证每个线程对共享资源按序进行原子操作。 2.程序流程设计 所有任务完成? 大于所需创建的线程总数? 是 是 结束线程 结束 否 否 开始 创建线程 定义创建线程数和每