00001 /* 00002 * ===================================================================================== 00003 * 00004 * Filename: CSCDQM_Lock.h 00005 * 00006 * Description: Monitor Object interface 00007 * 00008 * Version: 1.0 00009 * Created: 10/06/2008 01:49:51 PM 00010 * Revision: none 00011 * Compiler: gcc 00012 * 00013 * Author: Valdas Rapsevicius, valdas.rapsevicius@cern.ch 00014 * Company: CERN, CH 00015 * 00016 * ===================================================================================== 00017 */ 00018 00019 #ifndef CSCDQM_Lock_H 00020 #define CSCDQM_Lock_H 00021 00022 #include <boost/thread.hpp> 00023 #include <boost/thread/recursive_mutex.hpp> 00024 00025 namespace cscdqm { 00026 00031 class Lock { 00032 00033 private: 00034 00035 boost::recursive_mutex lckMutex; 00036 boost::recursive_mutex::scoped_lock lckLock; 00037 bool lockedByOther; 00038 00039 public: 00040 00041 Lock() : lckLock(lckMutex) { 00042 unlock(); 00043 lockedByOther = false; 00044 } 00045 00046 virtual ~Lock() { } 00047 00048 void lock() { 00049 if (!isLocked()) { 00050 lckLock.lock(); 00051 lockedByOther = true; 00052 } 00053 } 00054 00055 void unlock() { 00056 if (isLocked()) { 00057 lckLock.unlock(); 00058 lockedByOther = false; 00059 } 00060 } 00061 00062 const bool isLocked() const { 00063 return lckLock.locked(); 00064 return false; 00065 } 00066 00067 const bool isLockedByOther() const { 00068 return lockedByOther; 00069 return false; 00070 } 00071 00072 }; 00073 00074 } 00075 00076 #endif