建立可互换的Locks
来源:互联网 发布:淘宝睡衣哪家好 编辑:程序博客网 时间:2024/05/17 05:53
LockableObject类
#include<Windows.h>
//除了构造函数,其它成员函数都声明为虚函数
class LockableObject{
public:
LockableObject(){}
virtual ~LockableObject(){}
virtual void Lock() = 0;
virtual void Unlock() = 0;
private:
CRITICAL_SECTION m_CritSect;
};
//从lockableObject派生而来的CriticalSection
class CriticalSectionV2 :public LockableObject
{
public:
CriticalSectionV2();
virtual ~CriticalSectionV2();
virtual void Lock();
virtual void Unlock();
private:
CRITICAL_SECTION m_CritSect;
};
CriticalSectionV2::CriticalSectionV2()
{
InitializeCriticalSection(&m_CritSect);
}
CriticalSectionV2::~CriticalSectionV2()
{
DeleteCriticalSection(&m_CritSect);
}
void CriticalSectionV2::Lock()
{
EnterCriticalSection(&m_CritSect);
}
void CriticalSectionV2::Unlock()
{
LeaveCriticalSection(&m_CritSect);
}
//一个极安全又简单无比的Lock
class LockV2
{
public:
LockV2(LockableObject* pLockable);
~LockV2();
private:
LockableObject* m_pLockable;
};
LockV2::LockV2(LockableObject* pLockable)
{
m_pLockable = pLockable;
m_pLockable->Lock();
}
LockV2::~LockV2()
{
m_pLockable->Unlock();
}
//criticalSectionV2和Lockv2,彼此间互有协定。
//以安全又简单无比的lock重写string类
class StringV2
{
public:
StringV2();
virtual ~StringV2();
virtual void Set(char* str);
int GetLength();
private:
CriticalSectionV2 m_Lockable;
char* m_pData;
};
StringV2::StringV2()
{
m_pData = NULL;
}
StringV2::~StringV2()
{
delete [] m_pData;
}
void StringV2::Set(char *str)
{
LockV2 localLock(&m_Lockable);
delete[] m_pData;
m_pData = NULL;
m_pData = new char[::strlen(str) + 1];
::strcpy(m_pData, str);
}
int StringV2::GetLength()
{
LockV2 localLock(&m_Lockable);
if (m_pData == NULL)
return 0;
return ::strlen(m_pData);
}
- 建立可互换的Locks
- 伴随多态的可互换对象
- 对象导论之伴随多态的可互换对象
- 1.7:伴随多态的可互换对象
- 1.7 伴随多态的可互换对象
- XFCE下ctrl与caps locks两个键互换
- 建立完全可编辑的 DataGrid
- 建立动态可扩展的联系方式
- Js无刷新添加新层,拖动DIV层可互换位置的JavaScript实现
- 伴随多态的可互换对象(thinking in java)
- v$locks和v$session的说明
- 7.WinDbg-!locks 不可用的问题
- s5pv210的locks寄存器设置流程
- WinDbg !locks 不可用的问题
- java locks包下提供的锁。
- concurrent.locks包中的几种锁的区别
- 关于MYSQL 的 AUTO-INC Locks
- 可这样建立文件
- PrintWriter和Scanner的综合运用写文件并读文件
- rpm命令
- 【kmp】hdu1171 Number Sequence
- 机器学习:k-NN(k近邻法)kd树实现
- Idea使用入门
- 建立可互换的Locks
- ATS(应用传输安全)
- HDU 1008
- 使用C++在CAD中添加菜单栏(ObjectARX)
- aerospike性能测试
- How to Make an iOS VoIP App With Pjsip: Part 5
- windows下tomcat性能优化总结
- JavaScript中双叹号(!!)作用
- 【面试题】在O(1)时间复杂度删除链表节点