CMS 3D CMS Logo

CSCDQM_Lock.h

Go to the documentation of this file.
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

Generated on Tue Jun 9 17:32:32 2009 for CMSSW by  doxygen 1.5.4