#ifndef MUTEX_LOCK_H
#define MUTEX_LOCK_H
#ifndef WIN32
#include <windows.h>
#endif
#ifdef __unix
#include <pthread.h>
#endif // __unix
class Mutex
{
public:
Mutex();
~Mutex();
void Lock();
void Unlock();
private:
Mutex(const Mutex&);
void operator=(const Mutex&);
#ifdef WIN32
CRITICAL_SECTION m_mutex;
#endif // WIN32
#ifdef __unix
pthread_mutex_t m_mutex;
#endif // __unix
};
class MutexLock
{
public:
explicit MutexLock(Mutex *mutex) :m_mutex(mutex)
{
m_mutex->Lock();
};
~MutexLock()
{
m_mutex->Unlock();
};
private:
// 不允许复制
MutexLock(const MutexLock&);
void operator=(const MutexLock&);
Mutex *m_mutex;
};
#endif // !MUTEX_LOCK_H
mutex.cpp#include "mutex.h"
Mutex::Mutex()
{
#ifdef WIN32
InitializeCriticalSection(&m_mutex);
#endif
#ifdef __unix
pthread_mutex_init(&m_mutex, NULL);
#endif // __unix
}
Mutex::~Mutex()
{
#ifdef WIN32
DeleteCriticalSection(&m_mutex);
#endif
#ifdef __unix
pthread_mutex_destroy(&m_mutex);
#endif // __unix
}
void Mutex::Lock()
{
#ifdef WIN32
EnterCriticalSection(&m_mutex);
#endif
#ifdef __unix
pthread_mutex_lock(&m_mutex);
#endif // __unix
}
void Mutex::Unlock()
{
#ifdef WIN32
LeaveCriticalSection(&m_mutex);
#endif
#ifdef __unix
pthread_mutex_unlock(&m_mutex);
#endif // __unix
}
测试Mutex mutex;
void MutexTest()
{
MutexLock l(&mutex);
static int i = 0;
printf("i = %d\n", i);
++i;
}原理就是,当MutexLock生命周期结束时,会调用析构函数,从而可以实现每次从卫生间出来都可以解锁。当然你可以在MutexText添加大括号({})来约束MetexLock的生命同期,从而减小锁的粒度。原文:http://blog.csdn.net/yitouhan/article/details/34948239