00001 00011 #ifndef DEFINE_H_YLOCKOBJECT 00012 #define DEFINE_H_YLOCKOBJECT 00013 00014 #include <basic.h> 00015 #include <btron/taskcomm.h> 00016 #include "yexception.h" 00017 #include "ysemaphore.h" 00018 00024 class YLockObject { 00025 public: 00033 YLockObject(YSemaphore* sem, bool initialLock = true) { 00034 locked = false; 00035 semaphore = sem; 00036 00037 if (initialLock){ 00038 lock(); 00039 } 00040 } 00041 00046 ~YLockObject() { 00047 unlock(); 00048 } 00049 00051 void lock() { 00052 if (!locked && semaphore != 0){ 00053 semaphore->lock(); 00054 locked = true; 00055 } 00056 } 00057 00059 void unlock() { 00060 if (locked && semaphore != 0){ 00061 semaphore->unlock(); 00062 locked = false; 00063 } 00064 } 00065 00066 private: 00068 YSemaphore* semaphore; 00069 00071 bool locked; 00072 }; 00073 00074 #endif // DEFINE_H_YLOCKOBJECT