C++中需要闭眼默写出的两个类
class MutexLock : boost::noncopyable
{
public:
MutexLock() : m_holder(0)
{ pthread_mutex_init(&m_mutex, NULL)};
~MutexLock()
{
assert(m_holder == 0);
pthead_mutex_destory(&m_mutex);
}
bool isLockWithByThisThread()
{ return m_holder == CurrentThread::tid();}
void assertLocked()
{ assert(isLockWithByThisThread());}
void lock()
{
pthread_mutex_lock(&m_mutex);
m_holder = CurrentThread::tid();
}
void unlock()仅供MutexLockGuard调用
{
m_holder = 0;
pthread_mutex_unlock(&m_mutex);
}
pthread_mutex_t* getPthreadMutex()
{ return &m_mutex;}
private:
pthread_mutex_t m_mutex;
pid_t m_holder;
};
class MutexLockGuard : boost::noncopyable
{
public:
explicit MutexLockGuard(MutexLock& mutex) :
m_mutexlock(mutex)
{ m_mutexlock.lock();}
~MutexLockGuard()
{ m_mutexlock.unlock();}
private:
MutexLock& m_mutexlock;
};