在C++中实现同步锁,近似Synchronize(object){....}[VC/C++编程]
本文“在C++中实现同步锁,近似Synchronize(object){....}[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在做C++的项目中发现,由于用惯了c#的lock(){}和java的Synchronize(){},windows自带的临界区,互斥量,内核事件,信号量用起来不太习惯,于是打算自己在vc++中封装一个近似的东东.封装这个我决意采取一个临界区来做,终究的情势以下:
synchronize(object)
{
//....无论此处能否发生非常,object都能被释放掉.和c#的lock一样.
}
不多说,开始代码.先定义一个Mutex类
class Mutex
{
public:
Mutex(void);
~Mutex(void);
void Lock();
void UnLock();
private:
CRITICAL_SECTION m_criticalSection;
};
实现以下
Mutex.cpp文件
#include "Mutex.h"
Mutex::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 Mutex
{
public:
Mutex(void);
~Mutex(void);
void Lock();
void UnLock();
private:
CRITICAL_SECTION m_criticalSection;
};
class Lock
{
public:
Lock(Mutex &mutex);
~Lock(void);
void SetUnlock();
operator bool () const;
private:
Mutex &m_mutex;
bool m_locked;
};
Lock类的实现:Lock.cpp文件
#include "Mutex.h"
Lock::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() const
{
return m_locked;
}
以上是“在C++中实现同步锁,近似Synchronize(object){....}[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |