5c语言教程.doc_第1页
5c语言教程.doc_第2页
5c语言教程.doc_第3页
5c语言教程.doc_第4页
5c语言教程.doc_第5页
已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论