zoukankan      html  css  js  c++  java
  • 自动锁

    想想这么一个函数:

    int fun(int x)
    {
    	lock(...);
    	if (...) 
    		return 1;
    	else if (...) 
    		return 2;
    	else 
    		throw ...;
    	unlock(...);
    }

    这个时候,我们忘掉解锁的机会就太大了,多个return语句,以及可能出现的异常抛出。都有可能导致我们忘记了释放掉锁。以为我们要在每个return,throw前面加上一个unlock。
    还有一个东西很重要,作用域。如果没有作用域,我们的程序世界不知道会带来怎样的一种不可想象的混乱。
    因为作用域很重要,我们可以使用作用域的概念完成自动解锁功能

    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》,不错的一本书。

  • 相关阅读:
    452.用最少数量的箭引爆气球
    134.加油站
    Javascript
    spring-JDBC模板
    AOP注解方式ApsectJ开发
    AOP通知类型
    AOP的使用
    AOP相关术语
    AOP
    IOC注解详解
  • 原文地址:https://www.cnblogs.com/byfei/p/14104615.html
Copyright © 2011-2022 走看看