- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC60做的实现线程同步的四种方法的详细操作步骤
VC6.0做的实现线程同步的四种方法的详细操作步骤 软件作业一:如何实现线程同步?(二是一个基于单个文档的MFC程序,参考的是某本书上完整的一个可运行实例,所用代码和课件上几乎相同,应该会更符合老师上课讲的思路) windows系统提供的4种同步化机制分别为: 临界区 信号量内核对象 事件内核对象 互斥体对象 一:非MFC下实现线程同步实例 临界区:课本P43、44 // CriticalSection.cpp文件 #include stdio.h #include windows.h #include process.h BOOL g_bContinue = TRUE; int g_nCount1 = 0; int g_nCount2 = 0; CRITICAL_SECTION g_cs; // 对存在同步问题的代码段使用临界区对象 UINT __stdcall ThreadFunc(LPVOID); int main(int argc, char* argv[]) { UINT uId; HANDLE h[2]; // 初始化临界区对象 ::InitializeCriticalSection(g_cs); h[0] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, uId); h[1] = (HANDLE)::_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, uId); // 等待1秒后通知两个计数线程结束,关闭句柄 Sleep(1000); g_bContinue = FALSE; ::WaitForMultipleObjects(2, h, TRUE, INFINITE); ::CloseHandle(h[0]); ::CloseHandle(h[1]); // 删除临界区对象 ::DeleteCriticalSection(g_cs); printf(g_nCount1 = %d \n, g_nCount1); printf(g_nCount2 = %d \n, g_nCount2); return 0; } UINT __stdcall ThreadFunc(LPVOID) { while(g_bContinue) { ::EnterCriticalSection(g_cs); g_nCount1++; g_nCount2++; ::LeaveCriticalSection(g_cs); } return 0; } 事件内核对象:课本P46 // EventDemo.cpp文件 #include stdio.h #include windows.h #include process.h HANDLE g_hEvent; UINT __stdcall ChildFunc(LPVOID); int main(int argc, char* argv[]) { HANDLE hChildThread; UINT uId; // 创建一个自动重置的(auto-reset events),未受信的(nonsignaled)事件内核对象 g_hEvent = ::CreateEvent(NULL, FALSE, FALSE, NULL); hChildThread = (HANDLE)::_beginthreadex(NULL, 0, ChildFunc, NULL, 0, uId); // 通知子线程开始工作 printf(Please input a char to tell the Child Thread to work: \n); getchar(); ::SetEvent(g_hEvent); // 等待子线程完成工作,释放资源 ::WaitForSingleObject(hChildThread, INFINITE); printf(All the work has been finished. \n); ::CloseHandle(hChildThread); ::CloseHandle(g_hEvent); return 0; } UINT __stdcall ChildFunc(LPVOID) { ::WaitForSingleObject(g_hEvent, INFINITE); printf( Child thread is working...... \n); ::Sleep(5*1000); // 暂停5秒,模拟真正的工作 return 0; } 设定优先级实现三个线程的同步(参见课本P38) /
您可能关注的文档
最近下载
- 〖GB50981-2014〗建筑机电工程抗震设计规范(高清原版).pdf VIP
- 《汉字的创意与设计》课件.ppt VIP
- 2025年事业单位工勤技能-吉林-吉林造林管护工五级(初级工)历年参考题库含答案解析(5套).docx VIP
- 人工智能与创新学习尔雅网课答案.docx VIP
- 2025年甘肃辅警招聘考试题库(附答案).docx VIP
- 2015-2020年全国事业单位联考B类《综合应用能力》真题汇编(含答案).pdf VIP
- 一种电解液取样器.pdf VIP
- 中国脑血管病临床管理指南脑血管病高危人群管理.pptx VIP
- 新版《建设工程监理规范》(GB50319-2022)基本表式总表.pdf VIP
- 财经应用文写作习题及答案.pdf VIP
文档评论(0)