操作系统试验二多线程实现矩阵乘法_第1页
操作系统试验二多线程实现矩阵乘法_第2页
操作系统试验二多线程实现矩阵乘法_第3页
操作系统试验二多线程实现矩阵乘法_第4页
操作系统试验二多线程实现矩阵乘法_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用标准文案多线程编程实现矩阵乘法xxx711103xx2012年4月4日一、实验目的通过实验,熟悉基于Win32线程库和Pthread线程库的编程环境, 掌握利用 WindowsAPI和Pthread API进行多线程编程的方法,进一 步加深对线程概念以及多线程编程相关事项的理解。二、实验内容1 .在WindowSHI作系统上,利用Windows API编写应用程序实现矩 阵乘法。2 .在Linux操作系统上,利用Pthread API编写应用程序实现矩阵 乘法。3 .在上述两种环境下,实现相乘操作的两个矩阵均作为应用程序 的输入参数动态生成,并输出计算结果。4 .在程序实现过程中,要求每个

2、乘积矩阵元素的计算过程均由一 个独立的线程实现。三、实验步骤1、windows上:打开codeblocks IDE ,创建新C+频目,在新文文档大全实用标准文案件中输入如下代码,并编译运行。1 include<window5Th>2 #inclJide<proces3.h>3#mclLid<3<zdic .n>耳5int tnatl: ID 10;6int rcar2l1f7int res10 101;B9HANDLE hMul;ex_jJ1*;1011 intM;12 intK;13 intN:14ISstmet DOtJB int row, cel

3、; ;1617 DWORD WINAPI ThreadProc( LPVOID IpParameLer )18 0(19 DOUBr hCur = (DOUB IpParair.erer;20 int x k hCur->row;21 i int y - hCur->ccl;2223hMutex x:=CreateMutex iNULLt tmerNULLi ;2int r = 0;25for(int i=:;i<K;+i)26r-=irm七二:k: ;i,兀己七2 :工::¥:;27re5x2£ReleaseMucex(hMucexy);29:retur

4、n 0;30 L )3132313233343536373三39404142int Train (j日(printf 1rt请期入冠年行数与列数”三,;scant("d 年d”, SM, 4K);prinrf !尸情输入矩眸:心力:for int i= .;i<M;-11 ffor( int j= i; j<K; - -j)scanf i t iiracl : i :i ;文档大全实用标准文案prirrtf ("送瓮入组年行数与列数:'力刀;scanf id", sK, ill);gri鼻(”请输入矩孟:n");for (int 尸门

5、 MN;-r】 scanf L'edr'printf ("nnn:i ;DOUS 七 eirp:DOUBk 的工年口 = tejr.p;hTert:p->row = i;hTen3'>col = j;HANDLE hTtiread - CreateThread (NULL, 0, ThreadProcr hTempr jf NULL);CloseHandleihThread:;Sleep i ;90 ri 23 比 567 8 90126 7 7 7 7 7 7 7 7 7 7 B 0 -Breturn ;for ( int i = u; i<

6、;M; -jl)for int j = 0; j <N; j)WaitForSingleCbject ihMutex:iJ ;j:,INFINITE);for :mt j = j ; j <N;)printf(n%d R f resi jI );printf ("Xn71);2、linux 上打开gedit输入下面的代码,保存为 Thread.c ,在终端进入文档保存的目录并 输入gcc - c Thread.cgcc - o Thread Thread.。 - Ipthread./Thread得到输出结果。文档大全实用标准文案"include <stdt

7、o,h>|ffinclude <pthead*h>pthread_t hThread10lG;tnt pass10162;tnt M, K, N;lot matl1010;tnt mat21010;tnt resvoid ThreadProcftnt* paran)(tnt row = parapiG;tnt col - para?il;int rs - 0;tnt loop;for(loop=0;loop<K;+loop)rs+=natlrowloop*mat2loopcol; resrowcol=rs; tnt nain()tnt " J;printff&

8、#39;输入矩阵行数与列数:n''); scanf(N%d%d"f &M, gK):prtntf(M输入矩阵:nF );for(i=0;i<M;+i)(for(=0;j<K;+j)scant(,l%d",j );)printf("输入矩阵行数马列数:);scanfCdKd", &Kf &N);printf。1输入矩除入n”);for(j=0;j<N;+j)ssnf,d”,&mat2lj);文档大全实用标准文案for(j=0;j+)(passij9i;passijjl>j;pthrea

9、d_create(ihThread1.j(votd*)ThreadProcipasstij);for(i=0;t<M;+i) for(j-O;j<N;+j) pthread_join(hlhreddtj, NULL);口rtntf( "力结果:,);for(i=0;i<M;+i)(for(j=e;j<N;+J)( printf("%d resijl); prLntf(hlnh);)return 0;四、程序运行时的初值和运行结果1、在Windows操作系统上,利用 Windows API实现矩阵乘法,程序运行结果2.在Linux操作系统上,利用 Pt

10、hread API实现矩阵乘法程序运行结果文档大全实用标准文案. XWqXW AThreads 公共视频文档音乐Thread模板图片下靠桌面IpthreadThread Threads-公扶视相文j§音乐Threads Thread,o 模板图片下攀桌面xwQ)(加:”6 Is examples.desktop t.c* test.c t.ctest testae-*gcc -c Thread.cxwxw:gcc -o Thread Thread.o xwxw:-$ Is examples.desktop t.c- test,c t,ctest testae-xwxw;,/Threa

11、d 输入矩阵行数与列数: 2 Z 输入矩阵: 1 3 2 4 输入矩阵行数与列数: 3 2 输入矩阵: 1 2 2 3结果二7 11 10 16x阳电乂旧:-5 I五、实验体会1、有了线程可以更清晰方便地解决在一个进程内的很多 同步的问题,但也会带来新的困难和解决手段。多个进程问 存在进程间通信,进程间同步的问题,而线程也一样,不过 就通信而言,线程的通信实现相对更简单了。2、开始实验时对多线程编程尤其是API不够熟悉,对实现矩阵的乘法还不甚清楚,后来翻阅教材,查阅资料学习线 程的一些函数,慢慢有头绪。所以,不懂一个问题时,静下 心慢慢搞懂而不是急于求成很重要。3、本次试验遇到的最大障碍是编译时,输入 gcc -o Thread.c Ipthread 会报错 “(.text+0x18): undefined文档大全实用标准文案reference to 'main' collect2 Id返回 1 : 改为 gcc-c Th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论