首页 > 代码库 > Linux组件封装之一:MUtexLock
Linux组件封装之一:MUtexLock
本文对pthread_mutex_t 进行简易的封装;
互斥锁主要用于互斥,描述的是一种竞争关系,主要是一个 一种资源或者代码, 在一段时间内 至多能被一个程序访问。
而条件变量主要用于线程间同步, 描述的是一种协作关系。
Linux中互斥锁的应用比较简单,通用的有以下几个函数:
1 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);2 int pthread_mutex_lock(pthread_mutex_t *mutex);3 int pthread_mutex_unlock(pthread_mutex_t *mutex);4 int pthread_mutex_destroy(pthread_mutex_t *mutex);
说明:
1、MutexLock、以及下篇文章中的Condition利用构造函数和析构函数自动完成资源的申请和释放;
2、MutexLock、Condition和Thread 都涉及到系统资源,这些类 全部为不可复制的;例如,a程序启动了一把锁,而另外一个程序 b 复制了这把锁,若某一时刻,a程序把这把锁销毁了,这时无论如何,b程序都不可能拥有锁这个系统资源。因此,我们将其作为 NonCopyable 类 的私有继承。
一、NonCopyable类:
1 #ifndef NONCOPYABLE_H_ 2 #define NPNCOPYABLE_H_ 3 4 class NonCopyable //禁用值语义 5 { 6 public: 7 NonCopyable(){ } 8 ~NonCopyable(){ } 9 10 private:11 NonCopyable(const NonCopyable &);//no copy12 void operator=(const NonCopyable &);//no assignment13 };14 15 #endif
二、互斥锁类(MutexLock),代码如下:
1 #ifndef MUTEX_LOCK_H 2 #define MUTEX_LOCK_H 3 #include "NonCopyable.h" 4 #include "pthread.h" 5 #include <assert.h> 6 7 //attention 8 class MutexLock:NonCopyable 9 {10 public:11 MutexLock();12 ~MutexLock();13 14 void lock(); //上锁15 void unlock();//释放锁16 bool isLocking() const { return isLocked_;}//判断锁的状态17 pthread_mutex_t getMutex()18 { return mutex_; }19 private:20 pthread_mutex_t mutex_;21 bool isLocked_;//标记是否上锁22 };23 24 MutexLock::MutexLock()25 :isLocked_(false)26 {27 pthread_mutex_init(&mutex_, NULL);28 }29 MutexLock::~MutexLock()30 {31 //判断是否已经解锁32 assert(!isLocking());33 pthread_mutex_destroy(&mutex_);34 }35 void MutexLock::lock()36 {37 isLocked_ = true;38 pthread_mutex_lock(&mutex_);39 }40 void MutexLock::unlock()41 {42 isLocked_ = false;43 pthread_mutex_unlock(&mutex_);44 }45 46 #endif
Linux组件封装之一:MUtexLock
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。