#ifndef GledCore_GMutex_H
#define GledCore_GMutex_H
#include <Rtypes.h>
#ifndef __CINT__
#include <pthread.h>
#endif
class ZGlass;
class GMutex
{
protected:
#ifndef __CINT__
pthread_mutex_t mMut;
pthread_mutexattr_t mAttr;
#endif
public:
enum Init_e { fast, recursive, error_checking };
enum Lock_e { ok=0, bad_init, deadlock, busy, perm_fail };
GMutex(Init_e e=fast);
virtual ~GMutex();
Lock_e Lock();
Lock_e TryLock();
Lock_e Unlock();
#ifndef __CINT__
#include "GMutex.h7"
#endif
ClassDef(GMutex, 0);
};
class GMutexHolder
{
GMutex& mMutex;
public:
GMutexHolder(GMutex& m) : mMutex(m) { mMutex.Lock(); }
virtual ~GMutexHolder() { mMutex.Unlock(); }
ClassDef(GMutexHolder, 0);
};
class GMutexAntiHolder
{
GMutex& mMutex;
public:
GMutexAntiHolder(GMutex& m) : mMutex(m) { mMutex.Unlock(); }
virtual ~GMutexAntiHolder() { mMutex.Lock(); }
ClassDef(GMutexAntiHolder, 0);
};
class GLensReadHolder
{
ZGlass* mLens;
public:
GLensReadHolder(ZGlass* lens);
virtual ~GLensReadHolder();
ClassDef(GLensReadHolder, 0);
};
class GLensWriteHolder
{
ZGlass* mLens;
public:
GLensWriteHolder(ZGlass* lens);
virtual ~GLensWriteHolder();
ClassDef(GLensWriteHolder, 0);
};
#endif