参考 https://blog.csdn.net/cpp_chen/article/details/7170367
原理是__attribute__((cleanup))的指令特性,模拟RAII过程。
定义
#include <pthread.h>
static pthread_mutex_t mutexCreate()
{//创建并初始化递归锁
pthread_mutex_t m;
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype (&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init( &m, &attr);
return m;
}
static void mutexLock(pthread_mutex_t m)
{//加锁
pthread_mutex_lock( &m );
}
static void mutexUnLock(pthread_mutex_t m)
{//解锁
pthread_mutex_unlock( &m );
}
static void mutexDestroy(pthread_mutex_t m)
{//销毁锁
pthread_mutex_destroy(&m);
}
//重点在下面
static void __onCleanUp(pthread_mutex_t *m)
{
mutexUnLock(*m);
}
#define AUTOLOCK(mutex) \
mutexLock(mutex);\
pthread_mutex_t __autolock__ __attribute__((cleanup(__onCleanUp), unused)) = mutex;
使用示例
int main()
{
pthread_mutex_t m = mutexCreate();
AUTOLOCK (m);
//
}