- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
线程同步,多线程
多线程-线程间同步
【】nTickets - -语句时,线程1的时间片刚好用完了,线程2得到运行权,但此时nTickets还是30号,于是售出30号票。这样就出现了一票多售的情况。因此,多线程编程有时需要处理同步问题。
我们必须多线程竞争状态的同步问题。
为解决此类问题,必须引入同步处理机制。常用的同步处理机制包括临界区、互斥量、信号量、事件4种方式:
临界区
临界区是一段连续的代码区域,它要求在执行前获得对某些共享数据的独占的访问权。如果一个进程中的所有线程中访问这些共享数据的代码都放在临界区中,就能够实现对该共享数据的同步访问。临界区只能用于同步单个进程中的线程。
使用前调用InitializeCriticalSection,使用完毕调用DeleteCriticalSection;进入保护代码前调用EnterCriticalSection,离开保护代码时调用LeaveCriticalSection。
我们修改的代码如下:
int nTickets;
HANDLE hThread1;
HANDLE hThread2;
//实例化临界区对象
CRITICAL_SECTION g_sec;
DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
CTestDlg *pDlg = (CTestDlg *)lpParameter;
CString CurStr=;
while (TRUE)
{
//进入临界区,临界区对象的引用计数加1,同一个线程可以多次调用
//EnterCriticalSection,但是如果调用n次EnterCriticalSection以后,
//必须再调用n次的LeaveCriticalSection,使临界区对象的引用计数变为0,
//其它的线程才能进入临界区
EnterCriticalSection(g_sec);
if (nTickets 0)
{
Sleep(100);
CString str;
str.Format(%d, nTickets);
CurStr+=str+\r\n;
pDlg-SetDlgItemText(IDC_EDIT1,CurStr);
nTickets--;
//离开临界区
LeaveCriticalSection(g_sec);
if (nTickets==0) break;
}
}
return 0;
}
DWORD WINAPI ThreadProc2(LPVOID lpParameter)
{
CTestDlg *pDlg = (CTestDlg *)lpParameter;
CString CurStr=;
while (TRUE)
{
EnterCriticalSection(g_sec);
if (nTickets 0)
{
Sleep(100);
CString str;
str.Format(%d, nTickets);
CurStr+=str+\r\n;
pDlg-SetDlgItemText(IDC_EDIT2,CurStr);
nTickets--;
//离开临界区
LeaveCriticalSection(g_sec);
if (nTickets==0) break;
}
}
return 0;
}
void CTestDlg::OnButton1()
{
nTickets = 30;
//初始化临界区对象
InitializeCriticalSection(g_sec);
hThread1 = ::CreateThread(NULL, 0, ThreadProc1, this, 0, NULL);
hThread2 = ::CreateThread(NULL, 0, ThreadProc2, this, 0, NULL);
//释放临界区对象
//DeleteCriticalSection(g_sec); 放入析构函数去释放临界区对象
::CloseHandle(hThread1); //清除线程内核对象
::CloseHandle(hThread2);
}
互斥量
相关函数有CreateMutex,ReleaseMutex,WaitForSingleObject等。在调用CreateMutex 函数的时候Windows则创建了互斥量内核对象。
创建互斥量
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes,
BOOL bInitial
您可能关注的文档
- 纸牌屋人物分析.ppt
- 纸质书与电子书英语的比较.pptx
- 纸质音响创意大赛 SHOUTING DREAM.pptx
- 纳粹 英文.ppt
- 纳米铜胶体的制备和分散稳定性的研究.doc
- 纺织科学技术常用英语.doc
- 纺织和服装嘉欣丝绸.ppt
- 纳米管力学ppt.ppt
- 纵览中国文化_英文版-ppt.ppt
- 纺织厂防雷接地及照明系统设计.doc
- 2023年度计算机四级经典例题附参考答案详解(突破训练).docx
- 2023年度计算机四级经典例题附参考答案详解(完整版).docx
- 2023年度计算机四级经典例题附参考答案详解(考试直接用).docx
- 2023年度计算机四级经典例题附答案详解【模拟题】.docx
- 新华师大版(2022新课标)七年级上册数学教学课件 1.5 有理数的大小比较.pptx
- 2025年台湾地区公务员录用考试公安专业科目备考策略试题.docx
- 新冀教版(2022新课标)七年级上册数学教学课件 1.6 有理数的减法.pptx
- 2025年辅导员招聘考试题库——学生心理健康教育讲座策划与实施.docx
- 2025年物业管理师考试物业管理案例分析与实践技巧总结试卷.docx
- 2023年度计算机四级经典例题附参考答案详解(B卷).docx
最近下载
- QB/T 4286-2012 -纱窗通用技术条件.pdf VIP
- 2024年至2025年福建省莆田市公开招聘警务辅助人员辅警结构化面试历年模拟题库二含答案.docx
- 世界卫生组织.美国癌症学会-2022 年全球癌症统计数据:GLOBOCAN 对全球 185 个国家 36 种癌症的发病率和死亡率的估计-神刊CA临床医师癌症杂志.pdf
- 机电传动控制自动物料运输线控制电路设计..doc VIP
- 美国标准公司法中文.pdf
- 第一学期高中英语教研组总结.docx VIP
- 招标代理服务质量标准与保障措施.docx VIP
- 阅读理解四年级语文阅读理解精选及答案.pdf VIP
- 重庆市大足区教育委员会部分学校调动教师考试真题2024.docx VIP
- 2024重庆市大足区教育委员会部分学校考试调动在编在岗教师笔试模拟试题及答案解析.docx VIP
文档评论(0)