mutex.h

Go to the documentation of this file.
00001 /* === S Y N F I G ========================================================= */
00021 /* ========================================================================= */
00022 
00023 /* === S T A R T =========================================================== */
00024 
00025 #ifndef __SYNFIG_MUTEX_H
00026 #define __SYNFIG_MUTEX_H
00027 
00028 /* === H E A D E R S ======================================================= */
00029 
00030 /* === M A C R O S ========================================================= */
00031 
00032 /* === T Y P E D E F S ===================================================== */
00033 
00034 /* === C L A S S E S & S T R U C T S ======================================= */
00035 
00036 namespace synfig {
00037 
00038 class RecMutex;
00039 
00040 class Mutex
00041 {
00042     friend class RecMutex;
00043 
00044 protected:
00045     void* blackbox;
00046     
00047 public:
00048     
00049     class Lock
00050     {
00051         Mutex& mutex;
00052     public:
00053         Lock(Mutex& x):mutex(x) { mutex.lock(); }
00054         ~Lock() { mutex.unlock(); }
00055     };
00056     
00057     Mutex();
00058     ~Mutex();
00059     
00060     void lock();
00061     void unlock();
00062     bool try_lock();
00063     bool is_locked();
00064     
00065 private:
00067     Mutex(const Mutex&);
00068     
00070     void operator=(const Mutex&);
00071 };
00072 
00073 class RecMutex : public Mutex
00074 {
00075 public:
00076     RecMutex();
00077 
00078     void unlock_all();
00079 };
00080 
00081 class RWLock
00082 {
00083     void* blackbox;
00084     
00085 public:
00086     
00087     class ReaderLock
00088     {
00089         RWLock& rw_lock;
00090     public:
00091         ReaderLock(RWLock& x):rw_lock(x) { rw_lock.reader_lock(); }
00092         ~ReaderLock() { rw_lock.reader_unlock(); }
00093     };
00094     class WriterLock
00095     {
00096         RWLock& rw_lock;
00097     public:
00098         WriterLock(RWLock& x):rw_lock(x) { rw_lock.writer_lock(); }
00099         ~WriterLock() { rw_lock.writer_unlock(); }
00100     };
00101     
00102     RWLock();
00103     ~RWLock();
00104 
00105     void reader_lock();
00106     void reader_unlock();
00107     bool reader_trylock();
00108 
00109     void writer_lock();
00110     void writer_unlock();
00111     bool writer_trylock();
00112 };
00113 
00114 }; // END of namespace synfig
00115 
00116 /* === E N D =============================================================== */
00117 
00118 #endif

Generated on Fri Jun 23 15:20:50 2006 for synfig by  doxygen 1.4.6