- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[经管营销]第15章 线程同步
第15章 线程同步 几个概念 线程是操作系统调度的单位,在某些情况下,需要由多个线程共同完成一项工作;为了多个线程能够协调工作,就需要进行线程同步; 线程同步的分类: 访问共享资源:多个线程访问共享资源时,需要确保资源不受破外 事件通知:一个线程完成某项任务后通知其他线程 15.1 原子访问 原子访问是指线程对共享资源的独占式访问,即在线程访问共享资源时其他所有线程都不能在同一时间访问。 多线程访问共享数据问题: 15.1 原子访问(续) LONG value=0; DWORD WINAPI WorkThread1(LPVOID lParam) { value++; return 0; } DWORD WINAPI WorkThread2(LPVOID lParam) { value++; return 0; } 15.1 原子访问(续) 可能的结果: value=1 value=2 结论: 在多线程环境下对共享资源的操作并不像在单线程环境中简单; 要确保程序正确执行,就要保证多个指令是原子操作,即组成一个程序块的多个指令要么一起执行,要么都不执行。 解决办法:互锁 互锁相关函数 LONG InterlockedExchangeAdd( LONG volatile* Target, //指向需要修改的整型数据 LONG value //需要增加的值 ); 功能:以原子操作的方式对Target所指向的32位整型变量进行增值,阻止同一时刻的其他所有线程访问这个变量。 修改后的代码 LONG value=0; DWORD WINAPI WorkThread1(LPVOID lParam) { InterlockedExchangeAdd(value,1); return 0; } DWORD WINAPI WorkThread2(LPVOID lParam) { InterlockedExchangeAdd(value,1); return 0; } 结果:正确 15.2 关键代码段 关键代码段: 指在执行前首先取得对共享资源的访问权,然后让代码以原子操作方式执行来访问共享资源的一种方法。当线程尚未退出关键代码段时,其他线程将无法执行关键代码段。 基本原理: 为每个共享资源创建一个CRITICAL_SECTION对象(即临界对象),把对共享资源的访问操作封装为关键代码段。 相关函数 void InitializeCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 对CRITICAL_SECTION结构的各成员进行初始化。 相关函数(续) void DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 删除临界对象 相关函数(续) void EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 获取临界对象的访问权限 只有在取得访问权限后才能执行关键代码段,否则就进入等待状态,直到空闲时才会调度这个线程。 结果: 成功获取访问权限时,即可执行关键代码段 若暂时无法获取访问权限就自动进入阻塞状态 相关函数(续) void LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 释放临界对象,以便其他线程可访问该临界对象 相关函数(续) BOOL TryEnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection ); 获取访问权限。 成功:返回TRUE,执行关键代码段; 不成功返回FALSE。 相关函数(续) DWORD WaitForMultipleObjects( DWORD nCount, Const HANDLE* lpHandles, BOOL bWaitAll, DWORD dwMilliseconds ); 实例 在主线程中创建多个工作线程,在工作线程中使用关键代码实现对共享数据的同步访问。 关键代码分析: CreateThread(NULL,0,WorkThread, (LPVOID)i,0,NULL); 功能:创建线程 执行效果 15.3 内核对象与等待函数 内核对象是操作系统对资源进行管理的单位; 每个内核对象本质上只是一个内存块,用于存储对象的各种信息; 在应用程序中并不能直接访问内核对象,而是用句柄作为内核对象的标识; 在应用程序中操作某个内核对象,只能通过系统导出的API函数 15.3 内核对象与等待函数(续) 内核对
您可能关注的文档
- [经管营销]拥抱希望落实梦想-做自我生命的建筑师.pdf
- [经管营销]招聘_使用手册.pdf
- [经管营销]接待礼仪3.doc
- [经管营销]授权服务机构流程.doc
- [经管营销]推销实务2.ppt
- [经管营销]担保业务操作管理办法.doc
- [经管营销]操作规程汇编.doc
- [经管营销]收银员培训.ppt
- [经管营销]摩托罗拉绩效管理.ppt
- [经管营销]政府与市场:经典主题重估.ppt
- 《智能仓储技术在物流园区仓储设备智能化改造中的关键技术研究》教学研究课题报告.docx
- 初中生物:初中《动植物细胞结构》实验研究及优化教学研究课题报告.docx
- 2026届湖南省长沙县第六中学物理高三第一学期期末综合测试模拟试题含解析.doc
- 《重症监护病房肠内营养支持对老年患者营养代谢的影响研究》教学研究课题报告.docx
- 高中化学课堂的AI多模态交互在元素化合物教学中的应用教学研究课题报告.docx
- 初中数学课堂中培养学生逻辑思维能力的实践探讨教学研究课题报告.docx
- 初中英语“口语交际”与跨文化交际能力培养研究教学研究课题报告.docx
- 初中数学几何教学中动态几何软件的应用研究教学研究课题报告.docx
- 基于人工智能的学生数字足迹在初中历史竞赛中的应用研究教学研究课题报告.docx
- 基于过程写作的高中英语写作教学策略研究与实践报告教学研究课题报告.docx
原创力文档


文档评论(0)