zoukankan      html  css  js  c++  java
  • 很好的设计-锁的自动使用和释放

    多线程下,常常会使用互斥锁或者读写锁来确保临界区的正确使用。

    pthread_mutex_lock(&mutex);
    //using critical section
    pthread_mutex_unlock(&mutex);


    如果在使用临界区期间发生异常返回,导致锁没有释放。为了防止这种现象发生,我们通常要在每个return之前都要释放锁,增加代码量、影响美观,而且有忘记的隐患。期望一种能够在不使用时自动释放的锁,这就让我们想到类的自动析构。

    #include <phtread.h>
    class MutexLock {
    public:
      MutexLock(pthread_mutex_t* ptr) {
        mutex_ptr = ptr;
        pthread_mutex_lock(mutex_ptr);
      }
      ~MutexLock()
      {
         pthread_mutex_unlock(ptr); 
      }
    private:
      pthread_mutex_t* ptr;
    };


    如此类似的可以封装读写锁。使用的时候只需构造改封装类即可,在使用的时候,可以尽量减小锁的作用域。

    pthread_mutex_t mutex;
    //do something
    {
      MutexLock lock(&mutex);
      //using critical section
    }
    //do something



  • 相关阅读:
    班课6
    lesson one
    班课5
    ES6之Proxy及Proxy内置方法
    ES6模板字符串
    ES6之Symbol
    ES6对象及ES6对象简单拓展
    ES6函数的拓展
    ES6数组及数组方法
    ES6字符串方法
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981998.html
Copyright © 2011-2022 走看看