很好的设计-锁的自动使用和释放

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

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



原文地址:https://www.cnblogs.com/whuqin/p/4981998.html