////////////////////////////////////////////////////////////
//
// Declaration of classes
// AMutexAttributes, AMutex, AFunctionLock
//
// Copyright 2001
//
////////////////////////////////////////////////////////////
#ifndef __MUTEX_H__
#define __MUTEX_H__
#include <pthread.h>
// AMutexAttributes
class AMutex;
class AMutexAttributes
{
friend class AMutex;
public:
int status;
AMutexAttributes();
~AMutexAttributes();
// for POSIX kernel threads default PTHREAD_MUTEX_DEFAULT
int set_type(int z);
int set_shared(); // used with many processes
// default PTHREAD_PRIO_NONE
int set_protocol(int z);
int set_ceiling(int z);
private:
pthread_mutexattr_t attributes;
};
// AMutex
class ACondition;
class AMutex
{
friend int AWait(ACondition& condition,AMutex& mutex);
friend int AWait(ACondition& condition,AMutex& mutex,unsigned timeout_milliseconds);
AMutex(const AMutex& z); // forbidden
AMutex& operator=(const AMutex& z); // forbidden
public:
int status;
// default attributes
AMutex();
AMutex(const AMutexAttributes& z);
~AMutex();
int trylock();
int lock();
int unlock();
private:
pthread_mutex_t mutex;
};
// AFunctionLock
class AFunctionLock
{
AFunctionLock(const AFunctionLock&);
AFunctionLock& operator=(const AFunctionLock&);
public:
AFunctionLock(AMutex& c):mutex(&c)
{ if(mutex) mutex->lock(); }
~AFunctionLock()
{ if(mutex) mutex->unlock(); }
private:
AMutex * mutex;
};
#endif