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

  • 相关阅读:
    高精度模板(未完待续)
    $CH0201$ 费解的开关
    $POJ2288$ $Islands$ $and$ $Bridges$
    luoguP1445 [Violet]樱花
    P3694 邦邦的大合唱站队
    [NOI2009]管道取珠
    [AHOI2006]基因匹配
    luogu P3411 序列变换
    HNOI2001 产品加工
    牛客ACM赛 B [小a的旅行计划 ]
  • 原文地址:https://www.cnblogs.com/byfei/p/14104615.html
Copyright © 2011-2022 走看看