多线程解决意外没解锁的情况

想想这么一个函数:

 

int fun(int x) {

 lock(...);

 if (...) return 1;

 else if (...) return 2;

 else throw ...;

 unlock(...);

}


 

这个时候,我们忘掉解锁的机会就太大了,多个return语句,以及可能出现的异常抛出。都有可能导致我们忘记了释放掉锁。以为我们要在每个return,throw前面加上一个unlock。

还有一个东西很重要,作用域。如果没有作用域,我们的程序世界不知道会带来怎样的一种不可想象的混乱。

 因为作用域很重要,我们可以使用作用域的概念完成自动解锁功能

定义如下一个类ScopeLock

class ScopeLock {

public:

 ScopeLock(pthread_mutex_t mutex) : mutex(_mutex)

 {

  pthread_mutex_lock(&mutex);

 }

 ~ScopeLock() {

 pthread_mutex_unlock(&mutex);

 }

private:

 pthread_mutex_t mutex;

};


 

好了,这样你就只需要在你需要锁上锁的地方顶一个一个ScopeLock的局部变量,然后就不用管了,多好的事儿啊。

 

需要说明这个ScopeLock不是我自己发明的,来自POSA卷2,《pattern oriented software architecture》,不错的一本书。

 

转载于:https://www.cnblogs.com/byfei/archive/2012/11/14/3112172.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值