




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在做C+的项目中发现,由于用惯了c#的lock()和java的Synchronize(),windows自带的临界区,互斥量,内核事件,信号量用起来不太习惯,于是打算自己在vc+中封装一个类似的东东。封装这个我决定采用一个临界区来做,最终的形式如下:synchronize(object)/.无论此处是否发生异常,object都能被释放掉。和c#的lock一样。不多说,开始代码。先定义一个Mutex类class Mutexpublic:Mutex(void);Mutex(void);void Lock();void UnLock();private:CRITICAL_SECTION m_criticalSection;实现如下Mutex.cpp文件#include Mutex.hMutex:Mutex(void)InitializeCriticalSection(&m_criticalSection);Mutex:Mutex(void)DeleteCriticalSection(&m_criticalSection);/保证对象被析构时候能够删除临界区void Mutex:Lock()EnterCriticalSection(&m_criticalSection);void Mutex:UnLock()LeaveCriticalSection(&m_criticalSection);在写一个Lock类来包装头文件文件/为了方便把头文件定义到了Mutex.h文件里面去了,修改Mutex.h如、/下:#define synchronized(M) for(Lock M#_lock = M; M#_lock; M#_lock.SetUnlock()/这句话后面会用到class Mutexpublic:Mutex(void);Mutex(void);void Lock();void UnLock();private:CRITICAL_SECTION m_criticalSection;class Lockpublic:Lock(Mutex &mutex);Lock(void);void SetUnlock();operator bool () const;private:Mutex &m_mutex;bool m_locked;Lock类的实现:Lock.cpp文件Code#include Mutex.hLock:Lock(Mutex &mutex): m_mutex(mutex), m_locked(true)m_mutex.Lock();Lock:Lock(void)/*一定要在析构函数中解锁,因为不管发生什么,只要对象离开他的生命周期(即离开大括号),都会调用其析构函数*/m_mutex.UnLock();void Lock:SetUnlock()m_locked = false;Lock:operator bool() constreturn m_locked;到这里算是基板上告一段落了,你可以这么用。Mutex _mutex;Lock lock(_mutex);/.在这里同步但还差一点点,我要的目标是synchronize().简单!注意Mutex.h文件里面的宏,没错!就他了!#define synchronized(M) for(Lock M#_lock = M; M#_lock; M#_lock.SetUnlock()大功告成!来测试下实际测试#include Mutex.hMutex mutex1;/我的互斥量into thread_count = 0;DWORD CALLBACK thread_proc(LPVOID params)for(int i = 0; i 10; +i)synchronized(mutex1)/这里同步!for(char c = A; c = Z; +c)printf(%c,c);Sleep(2);printf(n);thread_count-;return 0;int _tmain(int argc, _TCHAR* argv)thread_count = 4;CreateThread(0, 0, thread_proc, 0, 0, 0);CreateThread(0, 0, thread_proc, 0, 0, 0);CreateThread(0, 0, thread_proc, 0, 0, 0);CreateThread(0, 0, thread_proc, 0, 0, 0);while (thread_cou
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 电子级醋酸纯化项目可行性研究报告
- 锌熔铸烟气治理项目可行性研究报告
- 防汛知识培训和普及课件
- 中药材种植订购协议
- 借款担保合同范本
- 氯气中毒肺保护策略-洞察及研究
- 北京公寓出租合同范文2篇
- 洗砂车间承包经营合同协议书范本标准版6篇
- 防台风应急避险知识培训课件
- 部队安全培训制度课件
- 2024装修施工安全合同样本
- 人教版数学一年级上册 前后上下左右专项练习题(试题)
- 合资投资谅解备忘录书
- 粮油作物种植与管理作业指导书
- 《三角函数的诱导公式(第1课时)》导学案2
- 全国赛课一等奖2024版新教材统编版七年级历史上册《中华文明的起源》课件
- IT项目经理招聘笔试题及解答2025年
- GB/T 22838.5-2024卷烟和滤棒物理性能的测定第5部分:卷烟吸阻和滤棒压降
- 江苏省镇江市2024-2025学年高三上学期期初考试数学试卷(解析版)
- 全国职业院校技能大赛高职组(供应链管理赛项)备赛试题库(含答案)
- JT叔叔医道课1-50集完整稿
评论
0/150
提交评论