使用pthread实现自动锁:
#include "pthread.h" class Mutex { public: Mutex(void); virtual ~Mutex(void); public: void lock(); void unLock(); protected: pthread_mutex_t m_pMutex; }; class AutoLock { public: AutoLock(Mutex &mutex); ~AutoLock(); protected: Mutex& mMutex; };
#include "Mutex.h" Mutex::Mutex(void) { pthread_mutexattr_t attr; pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&m_pMutex, &attr); pthread_mutexattr_destroy(&attr); } Mutex::~Mutex(void) { pthread_mutex_destroy(&m_pMutex); } void Mutex::lock() { (void)pthread_mutex_lock(&m_pMutex); } void Mutex::unLock() { (void)pthread_mutex_unlock(&m_pMutex); } AutoLock::AutoLock(Mutex &mutex):mMutex(mutex) { mMutex.lock(); } AutoLock::~AutoLock() { mMutex.unLock(); }