在多线程中解决线程同步问题的方法中经常使用互斥锁(mutex)和条件变量(cond)结合方法。muduo库中对它们的使用进行了封装,简化了使用方法。
对于互斥锁的封装使用了MutexLock和MutexLockGuard两个类。MutexLock用于创建和销毁互斥锁等操作,MutexLockGuard的构造函数用于加锁,析构函数用于解锁,这样在MutexLockGuard对象释放时就可以自动解锁,避免自己要记住什么时候解锁。
class MutexLock : boost::noncopyable
{
public:
MutexLock() : holder_(0)
{
pthread_mutex_init(&mutex_, NULL);
}
~MutexLock()
{
assert(hodler_ == 0);
pthread_mutex_destroy(&mutex_);
}
bool isLockedByThisThread()
{
return holder_ == CurrentThread::tid();
}
void assertLocked()
{
assert( isLockedByThisThread() );
}
/*仅供MutexLockGuard调用,严禁用户代码调用*/
void lock()
{
pthread_mutex_lock(&mutex_);
holder_ = CurrentThread::tid();
}
/*仅供MutexLockGuard调用&