// Common, groups Unix, Treads
// Copyright 2001 Alexander Liss
// Declaration of classes
// ARWLockAttributes, ARWLock, AReadFunctionLock, AWriteFunctionLock
//
// useful for cache management
#ifndef __RWLOCK_H__
#define __RWLOCK_H__
#include <pthread.h>
class ARWLock;
class ARWLockAttributes
{
friend class ARWLock;
public:
int status;
ARWLockAttributes();
~ARWLockAttributes();
int set_shared();
private:
pthread_rwlockattr_t attributes;
};
// ARWLock
class ARWLock
{
ARWLock(const ARWLock& z); // forbidden
ARWLock& operator=(const ARWLock& z); // forbidden
public:
int status;
ARWLock();
ARWLock(const ARWLockAttributes&);
~ARWLock();
int try_read_lock();
int read_lock();
int try_write_lock();
int write_lock();
int unlock();
private:
pthread_rwlock_t rwlock;
};
// AReadFunctionLock
class AReadFunctionLock
{
AReadFunctionLock(const AReadFunctionLock&);
AReadFunctionLock& operator=(const AReadFunctionLock&);
public:
AReadFunctionLock(ARWLock& c):rwlock(&c)
{ if(rwlock) rwlock->read_lock(); }
~AReadFunctionLock()
{ if(rwlock) rwlock->unlock(); }
private:
ARWLock * rwlock;
};
// AWriteFunctionLock
class AWriteFunctionLock
{
AWriteFunctionLock(const AWriteFunctionLock&);
AWriteFunctionLock& operator=(const AWriteFunctionLock&);
public:
AWriteFunctionLock(ARWLock& c):rwlock(&c)
{ if(rwlock) rwlock->write_lock(); }
~AWriteFunctionLock()
{ if(rwlock) rwlock->unlock(); }
private:
ARWLock * rwlock;
};
#endif