一、跨平台锁文件:manual_lock.h
//////////////////////////////////////////////////////////////// // //Descript: mannual lock. // Author: guowenyan // Date: 2013.12.16 // //////////////////////////////////////////////////////////////// #ifndef _MANUAL_LOCK_H_ #define _MANUAL_LOCK_H_ #ifdef WIN32 #include <Windows.h> #else #include <pthread.h> #endif class base_lock { public: virtual ~base_lock() { } public: virtual void lock() = 0; virtual void unlock() = 0; }; #ifdef WIN32 class win_cs_lock : public base_lock { CRITICAL_SECTION m_cs; public: win_cs_lock() { InitializeCriticalSection(&m_cs); } virtual ~win_cs_lock() { DeleteCriticalSection(&m_cs); } virtual void lock() { EnterCriticalSection(&m_cs); } virtual void unlock() { LeaveCriticalSection(&m_cs); } }; #else class linux_mutex_lock : public base_lock { pthread_mutex_t m_mutex; public: linux_mutex_lock() { pthread_mutex_init(&m_mutex, NULL); } virtual ~linux_mutex_lock() { pthread_mutex_destroy(&m_mutex); } virtual void lock() { pthread_mutex_lock(&m_mutex); } virtual void unlock() { pthread_mutex_unlock(&m_mutex); } }; #endif #endif //_MANUAL_LOCK_H_
二、自动锁文件:auto_lock.h
//////////////////////////////////////////////////////////////// // //Descript: auto lock. // Author: guowenyan // Date: 2013.12.16 // //////////////////////////////////////////////////////////////// #ifndef _AUTO_LOCK_H_ #define _AUTO_LOCK_H_ #include "manual_lock.h" // 线程自动加锁,可以直接使用boost::lock_guard class auto_lock { base_lock *m_p_base_lock; public: auto_lock(base_lock *p_base_lock) : m_p_base_lock(p_base_lock) { if (m_p_base_lock) m_p_base_lock->lock(); } ~auto_lock() { if (m_p_base_lock) m_p_base_lock->unlock(); } }; #endif //_AUTO_LOCK_H_