2009并行计算与多核程序设计09-10windows多线程编程.ppt
-
资源ID:80596892
资源大小:5.28MB
全文页数:88页
- 资源格式: PPT
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
2009并行计算与多核程序设计09-10windows多线程编程.ppt
并行计算与多核程序设计并行计算与多核程序设计理论课理论课9-10 Windows多多线程线程陈天洲,施青松,胡威tzchen,zjsqs,2009年12月9日,玉泉校区曹西1011浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ APIp12月4日消息pLarrabee芯片及相关软件开发未达到项目预期,它不会成为消费类产品pIntel会继续从事独立图形芯片的研发,具体打算要到2010年再行宣布2浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 2n低于正常线程:THREAD-PRIORITY-BELOW-NORMAL1n正常线程:THREAD-PRIORITY-NORMAL0n高于正常线程:THREAD-PRIORITY-ABOVENORMAL-1n关键时间:THREAD-PRIORITY-TIMECRITICAL-1514浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ Program is EndpWaitForSingleObjectnWaitsuntilthespecifiedobjectisinthesignaledstateorthetime-outintervalelapsesvoidWriteThread(LPVOIDparam)coutWritingendl;SetEvent(evRead);intmain(intargc,char*argv)evRead=CreateEvent(NULL,FALSE,FALSE,NULL);evFin=CreateEvent(NULL,FALSE,FALSE,NULL);_beginthread(ReadThread,0,NULL);_beginthread(WriteThread,0,NULL);WaitForSingleObject(evFinish,INFINITE);coutTheProgramisEndendl;return0;28浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 例子例子#includestdafx.h#include#include#defineTHREAD_INSTANCE_NUMBER3DWORDfoo(void*pData)intThreadNumberTemp=(*(int*)pData);HANDLEhSemaphore;coutfoo:ThreadNumberTempisrunning!endl;if(hSemaphore=OpenSemaphore(SEMAPHORE_ALL_ACCESS,FALSE,Semaphore.Test)=NULL)coutOpenSemaphoreerror!endl;coutfooThreadNumberTempgetsthesemaphoreendl;ReleaseSemaphore(hSemaphore,1,NULL);CloseHandle(hSemaphore);return0;40浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ Framework线程线程p做通用语言运行时(CommonLanguageRuntime,CLR)n在CLR中程序是以中间代码的形式执行的n在概念上和Java的字节码相似p.NET框架对线程提供了广泛的支持58浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ Framework线程同步线程同步p.NET应用程序是基于.NET框架的nCLR是.NET框架的重要组成部分nCRL是支持多线程的n所有.NET应用程序都可以实现多线程p可使用VB.NET或者C#.NET框架的语言来设计多线程程序pSystem.Threading命名空间下包含了在.NET框架中进行多线程编程所需要的类,因此在程序中首先要声明程序位于System.Threading命名空间。59浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ Framework线程同步的实现线程同步的实现p创建辅助(或从属)线程的第一个步骤是创建ThreadStart代理,指定要由该线程执行的线程函数。然后将ThreadStart代理传递给Thread类的构造函数。nThreadStartstarter=newThreadStart(MyFunction);Threadt=newThread(starter);t.Start();p线程创建好后,可以使用Thread类下的方法对线程进行控制:Resume 继续已挂起的线程。Sleep 已重载。将当前线程阻塞指定的毫秒数。Suspend 挂起线程,或者如果线程已挂起,则不起作用。Abort 调用此方法通常会终止线程。60浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ p.NET框架支持以下五种级别的线程优先级:n最高(Highest)n普通上(AboveNormal)n普通(Normal)(默认级别)n普通下(BelowNormal)n最低(Lowest)63浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ Draft,Standard for Programming Language C+Working Draft,Standard for Programming Language C+Doc No:N2857=09-0047Date:2009-03-23p1.10Multi-threadedexecutionsanddataracesp17节以后均为Library79浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ native_handle_type;/See 30.2.3/construct/copy/destroy:thread();templateexplicitthread(Ff);templatethread(F&f,Args&.args);thread();thread(constthread&)=delete;thread(thread&);thread&operator=(constthread&)=delete;thread&operator=(thread&);/members:voidswap(thread&);booljoinable()const;voidjoin();voiddetach();idget_id()const;native_handle_typenative_handle();/See 30.2.3/static members:staticunsignedhardware_concurrency();80浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ Studio调试器调试器pMSDN中给出的使用VisualStudio调试器调试线程的一些提示和一些常见的问题n在多线程代码中,使用跟踪点可以检查出程序中的许多bug。n可以使用断点筛选器将断点置于单个线程上。n如果我们通过用户界面来调试多线程应用程序可能比较困难,那么可以考虑在另一台机器上运行应用程序并使用远程调试。n可以在本机代码中使用SetThreadNameAPI或在托管代码中使用Name属性来设置线程名称。线程名称对于托管代码特别有用,因为在托管代码中无法通过线程ID来识别线程。n多线程应用程序中的死锁是一类极其严重的bug。n在调试本机代码时,可以通过在“监视”窗口或“快速监视”对话框中输入TIB查看“线程信息块”的内容。n调试本机代码时,在“监视”窗口或“快速监视”对话框中输入Err,可以查看当前线程的错误代码。n在调试使用了本机代码对托管代码调用的混合代码时,托管代码与调用它的本机代码在相同的物理线程内运行,挂起或冻结本机线程也会冻结托管代码。n我们还可以使用C运行时库(CRT)函数来调试多线程应用程序。82浙浙 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/ 江江 大大 学学 软软 硬硬 件件 协协 同同 设设 计计 实实 验验 室室http:/