多核软件开发技术第四讲: Windows多线程编程及调优.pptVIP

多核软件开发技术第四讲: Windows多线程编程及调优.ppt

  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多线程编程及调优.ppt

北京大学 二零零八年春季 *致谢:感谢Intel对本课程项目的资助 本讲主要内容 Windows线程库介绍 使用win32线程API 线程执行和资源存取 多线程调试与优化技术 Windows线程库介绍 Win32 API Win32 API提供了一系列处理线程的函数接口,来向应用程序提供多线程的功能 用Win32 API直接编写应用程序要求程序员对Windows操作系统有一定的了解 直接用Win32 API编写的应用程序,程序的执行代码小,运行效率高 MFC 用类库的方式将Win32 API 进行封装, 以类的方式提供给开发者 提供了对多线程的支持 MFC对同步对象作了封装 MFC具有其快速、简捷、功能强大等特点 .NET Framework 由两部分构成:公共语言运行库(CLR)和Framework类库(FCL) CLR包括自己的文件加载器、垃圾收集器、安全系统等 Framework类库提供了所有应用程序模型都要使用的一个面向对象的API集合 使用win32线程API 线程创建 HANDLE CreateThread ( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId ); 线程管理 设置线程的优先级 线程的优先级是相对其所属的进程的优先级而言 线程优先级 = 进程类基本优先级 + 线程相对优先级 线程的挂起与恢复 进程中的每个线程都有挂起计数器 线程的挂起计数器只能通过调用Windows API 函数来改变它的值 线程等待 一组能使线程阻塞其自身执行的等待函数 线程终结 在线程的里面终止线程 VOID ExitThread (DWORD dwExitCode) ; 在线程的外面终止线程 BOOL TerminateThread (HANDLE hThread, DWORDdw ExitCode) ; 线程执行和资源存取 Win32线程同步的实现 在WIN32中,同步机制主要有以下几种: 全局变量 事件(Event) 临界区(Critical section) 互斥量(Mutex) 信号量(Semaphore) 全局变量 进程中的所有线程均可以访问所有的全局变量 int var; //全局变量 UINT ThreadFunction(LPVOID pParam) { while (var) { //线程处理 } return 0; } 事件 事件存在两种状态: 激发状态(signaled or true) 未激发状态(unsignal or false) 事件可分为两类: 手动设置:这种对象只能用程序来手动设置,在需要该事件或者事件发生时 自动恢复:一旦事件发生并被处理后,自动恢复到没有事件状态, 事件 使用事件机制应注意: 设置事件是否要自动恢复; 设置事件的初始状态; 如果跨进程访问事件,必须对事件命名 临界区 临界区是一种防止多个线程同时执行一个特定代码段的机制 多个线程访问同一个临界区的原则: 一次最多只能一个线程停留在临界区内; 不能让一个线程无限地停留在临界区内,否则其它线程将不能进入该临界区 临界区相关API 初始化临界区 VOID WINAPI InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 删除临界区 VOID WINAPI DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 进入临界区 VOID WINAPI EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 离开临界区 VOID WINAPI LeaveCriticalSection(   LPCRITICAL_SECTION lpCriticalSection ); 互斥量 常用于协调多个线程或进程的活动 通过“锁定”和“取消锁定”资源 控制对共享资源的访问 锁定互斥量的线程一定也是对其解锁的线程 保证每次只能有一个线程获得互斥量 互斥量的创建 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LP

文档评论(0)

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

1亿VIP精品文档

相关文档