CLock.h
#ifndef __CLOCK_H__
#define __CLOCK_H__
#include <pthread.h>
class ILock
{
public:
virtual ~ILock() {};
virtual void Lock() const = 0;
virtual void UnLock() const = 0;
};
class CMutex : public ILock
{
public:
CMutex();
~CMutex();
virtual void Lock() const;
virtual void UnLock() const;
private:
mutable pthread_mutex_t m_mutex;
};
class CMyLock
{
public:
CMyLock(const ILock&);
~CMyLock();
private:
const ILock& m_lock;
};
#endif
CLock.cpp
#include "CLock.h"
CMutex::CMutex()
{
pthread_mutex_init(&m_mutex, NULL);
}
CMutex::~CMutex()
{
pthread_mutex_destroy(&m_mutex);
}
void CMutex::Lock() const
{
pthread_mutex_lock(&m_mutex);
}
void CMutex::UnLock() const
{
pthread_mutex_unlock(&m_mutex);
}
CMyLock::CMyLock(const ILock& m)
: m_lock(m)
{
m_lock.Lock();
}
CMyLock::~CMyLock()
{
m_lock.UnLock();
}