自定义互斥锁/读写锁类

// 互斥锁类

class CAutoLeaveLocker

{

public:

  CAutoLeaveLocker(void)
  {
    pAutoRelease = NULL;
  }

  CAutoLeaveLocker(pthread_mutex_t* locker)
  {
    pthread_mutex_lock(locker);
    pAutoRelease = locker;
  }

  ~CAutoLeaveLocker(void)
  {
    if (pAutoRelease)
    {
      pthread_mutex_unlock(pAutoRelease);
    }

  }

private:
  pthread_mutex_t* pAutoRelease;
};

 

// 读写锁类

class CAutoLeaveRWLocker
{
public:

  CAutoLeaveRWLocker(void)
  {
    pAutoRelease = NULL;
  }

  CAutoLeaveRWLocker(pthread_rwlock_t* locker, bool write_mode=true)
  {
    if( write_mode )
      pthread_rwlock_wrlock(locker);
    else
      pthread_rwlock_rdlock(locker);

    pAutoRelease = locker;
  }

  ~CAutoLeaveRWLocker(void)
  {
    if (pAutoRelease)
    {
      pthread_rwlock_unlock(pAutoRelease);
    }

  }

private:
  pthread_rwlock_t* pAutoRelease;
};

posted on 2016-11-04 11:11  Offen_Lou  阅读(171)  评论(0)    收藏  举报

导航