自动锁释放

自动锁释放的方式

将堆数据 与 栈数据结合的方式,实现锁自动释放,autoLock管理类是栈数据,但是CLock锁实例是堆信息,栈数据在退出函数时会自动释放,借着栈中的析构函数此时实例也自然也就解锁了

Clock声明及实现

class CLock
{
public:
    CLock();
    virtual ~CLock();
    void lock();
    void unlock();
    pthread_mutex_t& getMutex() { return m_lock; }
private:
    pthread_mutex_t m_lock;

};

CLock::CLock(){
    pthread_mutex_init(&m_lock,NULL);
}

CLock::~CLock(){
    pthread_mutex_destroy(&m_lock);
}

void CLock::lock(){
    pthread_mutex_lock(&m_lock);
}

void CLock::unlock(){
    pthread_mutex_unlock(&m_lock);
}

AutoLock管理类声明及实现

class CAutoLock
{
public:
    CAutoLock(CLock* pLock);
    virtual ~CAutoLock();
private:
    CLock* m_pLock;	
};

CAutoLock::CAutoLock(CLock* pLock){
	// 锁住
    m_pLock = pLock;
    if(NULL != m_pLock)
        m_pLock->lock();
}

CAutoLock::~CAutoLock(){
	// 释放
    if(NULL != m_pLock)
        m_pLock->unlock();
}

使用AutoLock 示例

// 在文件开头创建一个锁实例
static CLock* g_pLock = new CLock();

CSyncCenter* CSyncCenter::test(){
	// 传入文件开头的锁实例,但autoLock 作为栈空间数据,
	// 在test结束时会自身进行析构,析构时则可以达到解锁的作用
    CAutoLock autoLock(g_pLock);
    if(m_pInstance == NULL)
    {
        m_pInstance = new CSyncCenter();
    }
    return m_pInstance;
}
// 文件中各处使用时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值