• 自动锁


    想想这么一个函数:

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

  • 相关阅读:
    Java设计模式:单例模式
    Java设计模式:工厂方法模式
    Ubuntu16.04上搭建CDH5.14集群
    Spark 消息通信架构
    spark性能优化之shuffle优化
    spark的性能优化
    Hbase 的 Compaction
    Hbase要掌握的内容
    yarn的架构及原理
    MapReduce工作原理
  • 原文地址:https://www.cnblogs.com/byfei/p/14104615.html
Copyright © 2020-2023  润新知