欢迎来到天天文库
浏览记录
ID:55027697
大小:57.00 KB
页数:6页
时间:2020-04-26
《实验一-Linux多线程编程一.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验一Linux多线程编程I一、实验目的熟悉GNUGCC编译器,能够用Pthreads线程库熟练编写多线程程序。二、实验内容1、设一个double型的一维数组,数组长度是1,000,000,计算全数组部元素的和。要求:1)编制一个串行程序,仅有一个主线程完成上述计算。2)编制一个多线程程序,除主线程外,派生四个子线程完成上述计算。分别获得以上两个程序的计算时间,对比分析。2、定义以下三个数组:#defineLEN;DoubleA[LEN],B[LEN],C[LEN];for(i=0;i++;i2、]}分别编制一段串行程序和一段多线程程序(包括四个线程),执行上述循环体,比较其执行所花费的时间。提示:clock()是C/C++中的计时函数,与其相关的数据类型是clock_t,通过clock()可以获得当前的系统时间。四、实验步骤1、打开Linux终端2、输入命令$emacshello.c&(文件名可以自定义)3、编制源程序,注意加入必要的头文件#include,对于信号量,还需要加头文件。4、编译:$gcc-ohellohello.c–lpthread对于是信号量,编译时还需要加-lrt参数。5、执行:./hello五、实验3、要求写出完整的源程序,给出程序执行的结果。串行实验源代码如下:#include#include#include#include#defineLENvoidmain(){time_tt1,t2;doubleD[LEN];inti;doublesum=0.0;t1=clock();for(i=0;i#include4、tdio.h>#include#include#defineLENpthread_tthread[4];pthread_mutex_tmut;intnumber=0,i;doubleD[LEN];doublesum=0.0;void*thread1(){for(i=0;i5、ex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread3(){for(i=0;i6、d_exit(NULL);}voidthread_create(void){inttemp;memset(&thread,0,sizeof(thread));if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0)printf("线程1创建失败!");elseprintf("线程1被创建");if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0)printf("线程2创建失败");elseprintf("线程2被创建");if((temp=pth7、read_create(&thread[2],NULL,thread3,NULL))!=0)printf("线程3创建失败");elseprintf("线程3被创建");if((temp=pthread_create(&thread[3],NULL,thread4,NULL))!=0)printf("线程4创建失败");elseprintf("线程4被创建");}voidthread_wait(void){if(thread[0]!=0){pthread_join(thread[0]
2、]}分别编制一段串行程序和一段多线程程序(包括四个线程),执行上述循环体,比较其执行所花费的时间。提示:clock()是C/C++中的计时函数,与其相关的数据类型是clock_t,通过clock()可以获得当前的系统时间。四、实验步骤1、打开Linux终端2、输入命令$emacshello.c&(文件名可以自定义)3、编制源程序,注意加入必要的头文件#include,对于信号量,还需要加头文件。4、编译:$gcc-ohellohello.c–lpthread对于是信号量,编译时还需要加-lrt参数。5、执行:./hello五、实验
3、要求写出完整的源程序,给出程序执行的结果。串行实验源代码如下:#include#include#include#include#defineLENvoidmain(){time_tt1,t2;doubleD[LEN];inti;doublesum=0.0;t1=clock();for(i=0;i#include4、tdio.h>#include#include#defineLENpthread_tthread[4];pthread_mutex_tmut;intnumber=0,i;doubleD[LEN];doublesum=0.0;void*thread1(){for(i=0;i5、ex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread3(){for(i=0;i6、d_exit(NULL);}voidthread_create(void){inttemp;memset(&thread,0,sizeof(thread));if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0)printf("线程1创建失败!");elseprintf("线程1被创建");if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0)printf("线程2创建失败");elseprintf("线程2被创建");if((temp=pth7、read_create(&thread[2],NULL,thread3,NULL))!=0)printf("线程3创建失败");elseprintf("线程3被创建");if((temp=pthread_create(&thread[3],NULL,thread4,NULL))!=0)printf("线程4创建失败");elseprintf("线程4被创建");}voidthread_wait(void){if(thread[0]!=0){pthread_join(thread[0]
4、tdio.h>#include#include#defineLENpthread_tthread[4];pthread_mutex_tmut;intnumber=0,i;doubleD[LEN];doublesum=0.0;void*thread1(){for(i=0;i5、ex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread3(){for(i=0;i6、d_exit(NULL);}voidthread_create(void){inttemp;memset(&thread,0,sizeof(thread));if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0)printf("线程1创建失败!");elseprintf("线程1被创建");if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0)printf("线程2创建失败");elseprintf("线程2被创建");if((temp=pth7、read_create(&thread[2],NULL,thread3,NULL))!=0)printf("线程3创建失败");elseprintf("线程3被创建");if((temp=pthread_create(&thread[3],NULL,thread4,NULL))!=0)printf("线程4创建失败");elseprintf("线程4被创建");}voidthread_wait(void){if(thread[0]!=0){pthread_join(thread[0]
5、ex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread3(){for(i=0;i6、d_exit(NULL);}voidthread_create(void){inttemp;memset(&thread,0,sizeof(thread));if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0)printf("线程1创建失败!");elseprintf("线程1被创建");if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0)printf("线程2创建失败");elseprintf("线程2被创建");if((temp=pth7、read_create(&thread[2],NULL,thread3,NULL))!=0)printf("线程3创建失败");elseprintf("线程3被创建");if((temp=pthread_create(&thread[3],NULL,thread4,NULL))!=0)printf("线程4创建失败");elseprintf("线程4被创建");}voidthread_wait(void){if(thread[0]!=0){pthread_join(thread[0]
6、d_exit(NULL);}voidthread_create(void){inttemp;memset(&thread,0,sizeof(thread));if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0)printf("线程1创建失败!");elseprintf("线程1被创建");if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0)printf("线程2创建失败");elseprintf("线程2被创建");if((temp=pth
7、read_create(&thread[2],NULL,thread3,NULL))!=0)printf("线程3创建失败");elseprintf("线程3被创建");if((temp=pthread_create(&thread[3],NULL,thread4,NULL))!=0)printf("线程4创建失败");elseprintf("线程4被创建");}voidthread_wait(void){if(thread[0]!=0){pthread_join(thread[0]
此文档下载收益归作者所有