CVD 0.8
|
00001 #ifndef SYNCHRONIZED_H_ 00002 #define SYNCHRONIZED_H_ 00003 00004 // POSIX threads 00005 #include <pthread.h> 00006 00007 #include <cvd/nocopy.h> 00008 00009 namespace CVD { 00010 00016 class Synchronized : private NoCopy 00017 { 00018 public: 00020 Synchronized(); 00022 virtual ~Synchronized(); 00024 00027 void lock() const; 00028 00030 void unlock() const; 00031 00032 protected: 00033 pthread_mutexattr_t myAttr; 00034 mutable pthread_mutex_t myMutex; 00035 }; 00036 00041 class Lock : private NoCopy { 00042 public: 00043 00044 explicit Lock(const Synchronized& obj) 00045 : myObject(obj) { 00046 myObject.lock(); 00047 } 00048 00049 ~Lock() { 00050 myObject.unlock(); 00051 } 00052 00053 private: 00054 00055 const Synchronized& myObject; 00056 }; 00057 00058 } 00059 #endif