- #ifndef _LockMutex_H
#define _LockMutex_H
#include <windows.h>
//锁接口类
class ILock
{
public:
virtual ~ILock() {}
virtual void Lock() const = 0;
virtual void Unlock() const = 0;
};
class CLockMutex: public ILock
{
public:
CLockMutex(void);
~CLockMutex(void);
virtual void Lock() const;
virtual void Unlock() const;
private:
HANDLE m_mutex;
};
//锁
class CMyLock
{
public:
CMyLock(const ILock&);
~CMyLock();
private:
const ILock& m_lock;
};
#endif
- #include "stdafx.h"
#include "LockMutex.h"
//创建一个匿名互斥对象
CLockMutex::CLockMutex(void)
{
m_mutex = ::CreateMutex(NULL, FALSE, NULL);
}
//销毁互斥对象,释放资源
CLockMutex::~CLockMutex(void)
{
::CloseHandle(m_mutex);
}
//确保【拥有互斥对象的线程】对被保护资源的独自访问
void CLockMutex::Lock() const
{
DWORD d = WaitForSingleObject(m_mutex, INFINITE);
}
//释放当前线程拥有的互斥对象,以使其它线程可以拥有互斥对象,对被保护资源进行访问
void CLockMutex::Unlock() const
{
::ReleaseMutex(m_mutex);
}
//利用C++特性,进行自动加锁
CMyLock::CMyLock(const ILock& m) : m_lock(m)
{
m_lock.Lock();
}
//利用C++特性,进行自动解锁
CMyLock::~CMyLock()
{
m_lock.Unlock();
}
内核级别的锁,可以用于进程间同步