rwlockguard.cpp 576 Bytes
#include "rwlockguard.h"
#include "utils.h"
#include "stdexcept"

RWLockGuard::RWLockGuard(pthread_rwlock_t *rwlock) :
    rwlock(rwlock)
{

}

RWLockGuard::~RWLockGuard()
{
    unlock();
}

void RWLockGuard::wrlock()
{
    if (pthread_rwlock_wrlock(rwlock) != 0)
        throw std::runtime_error("wrlock failed.");
}

void RWLockGuard::rdlock()
{
    if (pthread_rwlock_rdlock(rwlock) != 0)
        throw std::runtime_error("rdlock failed.");
}

void RWLockGuard::unlock()
{
    if (rwlock != NULL)
    {
        pthread_rwlock_unlock(rwlock);
        rwlock = NULL;
    }
}