多线程下,常常会使用互斥锁或者读写锁来确保临界区的正确使用。
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