linux互斥锁的封装
linux下为了多线程的同步,通常会用到锁的概念。
posix下抽象了一个锁类型的结构:pthread_mutex_t。通过对该结构的操作,来判断资源是否可以访问。顾名思义,加锁(lock)后,别人就无法打开,只有当锁没有关闭(unlock)的时候才能访问资源。
它主要用如下5个函数进行操作(头文件#include<pthread.h> 编译时加入 -lpthread选项)。
1:pthread_mutex_init(pthread_mutex_t * mutex,const pthread_mutexattr_t *attr);
初始化锁变量mutex。attr为锁属性,NULL值为默认属性。
2:pthread_mutex_lock(pthread_mutex_t *mutex);加锁
3:pthread_mutex_tylock(pthread_mutex_t *mutex);加锁,但是与2不一样的是当锁已经在使用的时候,返回为EBUSY,而不是挂起等待。
4:pthread_mutex_unlock(pthread_mutex_t *mutex);释放锁
5:pthread_mutex_destroy(pthread_mutex_t *mutex);使用完后释放
下面是对互斥锁的一个封装:
//这是一个互斥锁,用一个锁变量来初始化自己的时候,会在构造的时候自动上锁,释构的时候自动解锁
class Lock{
public:
Lock(){
pthread_mutex_init(&_mutex);
_lock = NULL;
}
Lock(Lock &l){
_l = &l;
_l->lock();
}
~Lock(){
if(_l = NULL){
pthread_mutex_destroy(&_mutex);
}else{
_l->unlock();
}
inline void lock(){
pthread_mutex_lock(&mutex);
}
inline void ~unlock(){
pthread_mutex_unlock(&mutex);
}
}
private:
pthread_mutex_t _mutex;
Lock * _lock;
};
pthread_rwlock_t读写锁函数说明:

浙公网安备 33010602011771号