您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 实验一 Linux多线程编程一
实验一Linux多线程编程I一、实验目的熟悉GNUGCC编译器,能够用Pthreads线程库熟练编写多线程程序。二、实验内容1、设一个double型的一维数组,数组长度是1,000,000,计算全数组部元素的和。要求:1)编制一个串行程序,仅有一个主线程完成上述计算。2)编制一个多线程程序,除主线程外,派生四个子线程完成上述计算。分别获得以上两个程序的计算时间,对比分析。2、定义以下三个数组:#defineLEN100000;DoubleA[LEN],B[LEN],C[LEN];for(i=0;i++;iLEN){C[i]=sin(i);B[i]=C[i]*2;A[i]=B[i]+C[i]}分别编制一段串行程序和一段多线程程序(包括四个线程),执行上述循环体,比较其执行所花费的时间。提示:clock()是C/C++中的计时函数,与其相关的数据类型是clock_t,通过clock()可以获得当前的系统时间。四、实验步骤1、打开Linux终端2、输入命令$emacshello.c&(文件名可以自定义)3、编制源程序,注意加入必要的头文件#includepthread.h,对于信号量,还需要加头文件semaphore.h。4、编译:$gcc-ohellohello.c–lpthread对于是信号量,编译时还需要加-lrt参数。5、执行:./hello五、实验要求写出完整的源程序,给出程序执行的结果。串行实验源代码如下:#includepthread.h#includesemaphore.h#includestdio.h#includetime.h#defineLEN1000000voidmain(){time_tt1,t2;doubleD[LEN];inti;doublesum=0.0;t1=clock();for(i=0;iLEN;i++){sum+=D[i];}t2=clock();printf(sum=%d\n,t2-t1);}执行结果:多线程实验源代码如下:#includepthread.h#includestdio.h#includetime.h#includestring.h#defineLEN1000000pthread_tthread[4];pthread_mutex_tmut;intnumber=0,i;doubleD[LEN];doublesum=0.0;void*thread1(){for(i=0;iLEN;i++){pthread_mutex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread2(){for(i=0;iLEN;i++){pthread_mutex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread3(){for(i=0;iLEN;i++){pthread_mutex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}void*thread4(){for(i=0;iLEN;i++){pthread_mutex_lock(&mut);sum+=D[i];pthread_mutex_unlock(&mut);}pthread_exit(NULL);}voidthread_create(void){inttemp;memset(&thread,0,sizeof(thread));if((temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0)printf(线程1创建失败!\n);elseprintf(线程1被创建\n);if((temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0)printf(线程2创建失败);elseprintf(线程2被创建\n);if((temp=pthread_create(&thread[2],NULL,thread3,NULL))!=0)printf(线程3创建失败);elseprintf(线程3被创建\n);if((temp=pthread_create(&thread[3],NULL,thread4,NULL))!=0)printf(线程4创建失败);elseprintf(线程4被创建\n);}voidthread_wait(void){if(thread[0]!=0){pthread_join(thread[0],NULL);}if(thread[1]!=0){pthread_join(thread[1],NULL);}if(thread[2]!=0){pthread_join(thread[2],NULL);}if(thread[3]!=0){pthread_join(thread[3],NULL);}}intmain(){clock_tt1,t2;t1=clock();pthread_mutex_init(&mut,NULL);thread_create();thread_wait();t2=clock();printf(sum=%d\n,t2-t1);return0;}执行结果:串行实验源代码如下#includepthread.h#includesemaphore.h#includestdio.h#includetime.h#includemath.h#defineLEN100000voidmain(){doubleA[LEN],B[LEN],C[LEN];inti;clock_tt1,t2;t1=clock();for(i=0;iLEN;i++){C[i]=sin(i);B[i]=C[i]*2;A[i]=B[i]+C[i];}t2=clock();printf(sum=%d\n,t2-t1);执行结果:
本文标题:实验一 Linux多线程编程一
链接地址:https://www.777doc.com/doc-4240416 .html