利用 __attribute__((cleanup)) 实现自动加解锁的宏定义

参考 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);
    //////
}

猜你喜欢

转载自blog.csdn.net/holdsky/article/details/83825956