头文件:
#ifndef __BSON_INFOSERVER_LOCKER_H__
#define __BSON_INFOSERVER_LOCKER_H__
#ifdef WIN32
#include <Windows.h>
#else
#include <pthread.h>
#endif
typedef class SimLock
{
private:
#ifdef WIN32
CRITICAL_SECTION win_critical_section;
#else
pthread_mutex_t linux_mutex;
#endif
public:
SimLock();
SimLock(const SimLock &other);
void lock();
void unlock();
virtual ~SimLock();
}LockType;
#endif //__BSON_INFOSERVER_LOCKER_H__
源文件:
#include "bson_infoserver_locker.h"
SimLock::SimLock()
{
#ifdef WIN32
InitializeCriticalSection(&win_critical_section);
#else
pthread_mutex_init(&linux_mutex, NULL);
#endif
}
SimLock::SimLock(const SimLock&other)
{
#ifdef WIN32
this->win_critical_section = other.win_critical_section;
InitializeCriticalSection(&(this->win_critical_section));
#else
this->linux_mutex = other.linux_mutex;
pthread_mutex_init(&(this->linux_mutex), NULL);
#endif
}
void SimLock::lock()
{
#ifdef WIN32
EnterCriticalSection(&win_critical_section);
#else
pthread_mutex_lock(&linux_mutex);
#endif
}
void SimLock::unlock()
{
#ifdef WIN32
LeaveCriticalSection(&win_critical_section);
#else
pthread_mutex_unlock(&linux_mutex);
#endif
}
SimLock::~SimLock()
{
#ifdef WIN32
DeleteCriticalSection(&win_critical_section);
#else
pthread_mutex_destroy(&linux_mutex);
#endif
}