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



  • 相关阅读:
    Linux正则和grep命令
    Linux用户和权限
    XP下安装ubuntu
    Linux命令行和shell编程
    Linux软件安装及基本概念
    Linux历史,安装,分区,版本
    Eric Linux
    批量插入数据
    Django 相关
    标签,
  • 原文地址:https://www.cnblogs.com/whuqin/p/4981998.html
Copyright © 2011-2022 走看看