标签:Muduo lock unlock mutex pthread holder MutexLock
MutexLock
- #include <boost/noncopyable.hpp> #include <thread> #include <assert.h> class MutexLock : boost::noncopyable { public: MutexLock():holder_(0){ pthread_mutex_init(&mutex_,NULL); } ~MutexLock(){ pthread_mutex_destroy(&mutex_); } bool isLockByThisThread(){ return holder_ == pthread_self(); //原本是holder_ == CurrentThread::tid(); } void assertLocked(){ assert(isLockByThisThread()); } void lock(){ pthread_mutex_lock(&mutex_); holder_ = pthread_self(); //如果两行反了,当前线程还没拿上锁呢,isLockByThisThread就会返回错误的结果了 //原本是holder_ = CurrentThread::tid(); } void unlock(){ holder_ = 0; pthread_mutex_unlock(&mutex_); //同上 } pthread_mutex_t* getPhreadMutex(){ return &mutex_; } private: pthread_mutex_t mutex_; pid_t holder_; }; class MutexLockGuard : boost::noncopyable { public: explicit MutexLockGuard(MutexLock& mutex):mutex_(mutex){ mutex.lock(); } ~MutexLockGuard(){ mutex_.unlock(); } private: MutexLock mutex_; };
有报错
标签:Muduo,lock,unlock,mutex,pthread,holder,MutexLock 来源: https://www.cnblogs.com/dbnn/p/16641492.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。