首页 > 代码库 > 自动锁
自动锁
新学了一个技巧:自动锁,类似于ace的自动锁,进入作用域声明一个用mutex初始化的自动锁对象,对象声明成功则表示获取锁资源成功,程序继续运行,否则持续等待;在离开作用域时自动释放锁。
class AutoLock
{
public:
AutoLock(pthread_mutex_t* pMutex):m_mutex(pMutex)
{
pthread_mutex_lock(m_mutex);
}
~AutoLock()
{
pthread_mutex_unlock(m_mutex);
}
private:
pthread_mutex_t *m_mutex;
};
{
public:
AutoLock(pthread_mutex_t* pMutex):m_mutex(pMutex)
{
pthread_mutex_lock(m_mutex);
}
~AutoLock()
{
pthread_mutex_unlock(m_mutex);
}
private:
pthread_mutex_t *m_mutex;
};
调用则如下
//预处理,初始化锁资源
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED);
pthread_mutex_t tid;
pthread_mutex_init(&tid, &attr);
function()
{
//进入作用域自动锁定资源,且离开作用域自动释放资源,不需要每一个出口手动释放资源,提高健壮性
DCPParamAutoLock lock(&tid);
//do something and leave effect zone
}
嗯,简单好用。
自动锁
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。