多核程序设计4_附件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
谢谢 浙 江 大 学 英 特 尔 技 术 中 心 多核程序设计 第四章 Windows多线程编程及调优 2007年6月12日 Windows线程库介绍 Win32 API是Windows操作系统为内核以及应用程序之间提供的接口,将内核提供的功能进行函数封装,应用程序通过调用相关的函数获得相应的系统功能。 MFC是微软基础函数类库(Microsoft Foundation Classes),由微软提供的,用类库的方式将Win32 API 进行封装, 以类的方式提供给开发者。 .NET?Framework?由两部分构成:公共语言运行库(Common?Language?Runtime?,CLR)和Framework类库(Framework?Class?Library?,FCL)。.NET 基础类库的System.Threading命名空间提供了大量的类和接口来支持多线程。所有与多线程机制相关的类都存放在System.Threading命名空间中。 使用win32线程API Win32 函数库中提供了操作多线程的函数, 包括创建线程、管理线程、终止线程、线程同步等接口。 线程函数 DWORD WINAPI ThreadFunc (LPVOID lpvThreadParm); 线程创建 HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 线程管理 设置线程的优先级 线程优先级 = 进程优先级 + 线程相对优先级 Bool SetThreadPriority (HANDL E hPriority , int nPriority) 线程的挂起与恢复 进程中的每个线程都有挂起计数器(suspend count) 。当挂起计数器值为0 时,线程被执行;当挂起计数器值大于0 时,调度器不去调度该线程。 DWORD SuspendThread(HANDLE hThread); DWORD ResumeThread(HANDLE hThread); 线程等待 一组能使线程阻塞其自身执行的等待函数WaitForSingleObject、WaitForMultipleObject。 线程终结 Win32多线程的实现 下面这个程序首先创建两个线程,当输入为1时,执行线程,否则挂起线程。 #include windows.h #include iostream using namespace std; ? DWORD WINAPI FunOne(LPVOID param){ while(true) { Sleep(1000); couthello! ; } return 0; } DWORD WINAPI FunTwo(LPVOID param){ while(true) { Sleep(1000); coutworld! ; } return 0; } Win32多线程的实现(续) int main(int argc, char* argv[]) { int input=0; HANDLE hand1=CreateThread (NULL, 0, FunOne, (void*)input, CREATE_SUSPENDED, NULL); HANDLE hand2=CreateThread (NULL, 0, FunTwo, (void*)input, CREATE_SUSPENDED, NULL); while(true){ cininput; if(input==1) { ResumeThread(hand1); ResumeThread(hand2); } else { SuspendThread(hand1); SuspendThread(hand2); } }; TerminateThread(hand1,1); TerminateThread(hand2,1); return 0; } 线程执行和资源存取 线程之间通信的两个基本问题是互斥和同步 线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应该等待,直到消息到达时才被唤

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档