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读写锁函数说明:

 

posted @ 2016-06-21 17:06  叫我二当家  阅读(383)  评论(0)    收藏  举报