// $Header: /cvs/gled-1.2/GledCore/Gled/GMutex.cxx,v 1.4 2005/03/11 17:50:16 matevz Exp $
// Copyright (C) 1999-2005, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.
#include "GMutex.h"
#include <Gled/GledTypes.h>
#include <Glasses/ZGlass.h>
#include <errno.h>
ClassImp(GMutex)
//extern int pthread_mutexattr_settype(pthread_mutexattr_t*, int);
//#define pthread_mutexattr_settype __pthread_mutexattr_settype
// safr ... ADAPTIVE not in glibc b4 rh7 ... falling back to FAST
GMutex::GMutex(Init_e e) {
// This can't fail ... so says the pthread man
pthread_mutexattr_init(&mAttr);
switch(e) {
case fast:
pthread_mutexattr_settype(&mAttr, PTHREAD_MUTEX_FAST_NP); break;
case recursive:
pthread_mutexattr_settype(&mAttr, PTHREAD_MUTEX_RECURSIVE_NP); break;
case error_checking:
pthread_mutexattr_settype(&mAttr, PTHREAD_MUTEX_ERRORCHECK_NP); break;
default:
pthread_mutexattr_settype(&mAttr, PTHREAD_MUTEX_FAST_NP); break;
}
int ret;
if( (ret = pthread_mutex_init(&mMut, &mAttr)) ) {
perror("GMutex::GMutex");
}
}
GMutex::~GMutex() { pthread_mutex_destroy(&mMut); }
GMutex::Lock_e GMutex::Lock()
{
int ret = pthread_mutex_lock(&mMut);
switch(ret) {
case 0: return ok;
case EDEADLK: return deadlock;
default: return bad_init;
}
}
GMutex::Lock_e GMutex::TryLock()
{
int ret = pthread_mutex_trylock(&mMut);
switch(ret) {
case 0: return ok;
case EBUSY: return busy;
default: return bad_init;
}
}
GMutex::Lock_e GMutex::Unlock()
{
int ret = pthread_mutex_unlock(&mMut);
switch(ret) {
case 0: return ok;
case EPERM: return perm_fail;
default: return bad_init;
}
}
/**************************************************************************/
GLensReadHolder::GLensReadHolder(ZGlass* lens) : mLens(lens)
{ mLens->ReadLock(); }
GLensReadHolder::~GLensReadHolder()
{ mLens->ReadUnlock(); }
GLensWriteHolder::GLensWriteHolder(ZGlass* lens) : mLens(lens)
{ mLens->WriteLock(); }
GLensWriteHolder::~GLensWriteHolder()
{ mLens->WriteUnlock(); }
ROOT page - Home page - Class index - Class Hierarchy - Top of the page
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.