利用 __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);
    //
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值