CVD 0.8
cvd/synchronized.h
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