1 / 13
文档名称:

大连东软信息学院-多核多线程-实验一.doc

格式:doc   大小:112KB   页数:13
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

大连东软信息学院-多核多线程-实验一.doc

上传人:漫山花海 2019/10/30 文件大小:112 KB

下载得到文件列表

大连东软信息学院-多核多线程-实验一.doc

文档介绍

文档介绍:---------------------------------作者:_____________-----------------------------日期::_____________大连东软信息学院-多核多线程-实验一---------------------------------------------------------------------编制:---------------------------------------------------------------------日期:项目一:Windows*Threads多线程编程模块一:基础模块4编译执行,输出结果:简答与思考:写出修改后的HelloThreads的代码。//:定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê#include""#include<>constintnumThreads=4;DWORDWINAPIhelloFunc(LPVOIDarg){ intmyNum=*((int*)arg);printf("HelloThread!Thread%d\n",myNum); return0;}intmain(intargc,_TCHAR*argv[]){ HANDLEhThread[numThreads];inttNum[numThreads]; for(inti=0;i<numThreads;i++) {tNum[i]=i; hThread[i]= CreateThread(NULL,0,helloFunc,&tNum[i],0,NULL); }WaitForMultipleObjects(numThreads,hThread,TRUE,INFINITE); return0;}项目总结。在主线程中循环调用CreateThread()函数生成四个子线程分别去执行helloFunc()函数,并将线程的句柄保存在hThread数组中,CreateThread()的第四个参数给每个线程传递参数tNum获取该线程号,由helloFunc()的参数接收并指向内容。由于主线程为每个子线程传递了不同的参数,所以通过子线程的执行结果可以判断出四个线程的执行顺序。这个实验要我们初步认识了程序的并行化设计思想,为以后的并行化程序设计打下了基础。模块二:临界区模块3编译执行,记录结果:Pi=Thetimeofcalculationwasseconds6编译执行,记录结果:Pi=Thetimeofcalculationwasseconds7加速比:,并行效率::1如何进行并行化的?请写出并行化的思路与具体的代码。答:在程序中创建两个子线程,另主线程等待所有的子线程执行结束后退出。代码:#include""#include<>#include<>staticlongnum_steps=1000000000;constintgNumThreads=2;doublestep=,pi=,sum=;CRITICAL_SECTIONgCS;DWORDWINAPIthreadFunction(LPVOIDpArg){ intmyNum=*((int*)pArg); doublesum1=,x; for(inti=myNum;i<num_steps;i+=gNumThreads){x=(i+)*step;sum1=sum1+/(+x*x);}EnterCriticalSection(&gCS); sum+=sum1; LeaveCriticalSection(&gCS); return0;}intmain(intargc,_TCHAR*argv[]){clock_tstart,stop;start=clock();HANDLEthreadHandles[gNumThreads];inttNum[gNumThreads];InitializeCriticalSection(&gCS);step=/(double)num_steps;for(inti=0;i<gNumThreads;++i){ tNum[i]=i; threadHandles[i]=CreateThread(NULL,0,threadFunction,&tNum[i],0,NULL);}WaitForMultipleObjects(gNumThreads,threadHandles,TRUE,INFINITE);DeleteCriticalSection(&gCS);pi