Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members

/home/jeroen/FOX/fox/fox-1.7.33/include/FXReadWriteLock.h
00001 /********************************************************************************
00002 *                                                                               *
00003 *                  R e a d - W r i t e   L o c k   C l a s s                    *
00004 *                                                                               *
00005 *********************************************************************************
00006 * Copyright (C) 2004,2012 by Jeroen van der Zijp.   All Rights Reserved.        *
00007 *********************************************************************************
00008 * This library is free software; you can redistribute it and/or modify          *
00009 * it under the terms of the GNU Lesser General Public License as published by   *
00010 * the Free Software Foundation; either version 3 of the License, or             *
00011 * (at your option) any later version.                                           *
00012 *                                                                               *
00013 * This library is distributed in the hope that it will be useful,               *
00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
00016 * GNU Lesser General Public License for more details.                           *
00017 *                                                                               *
00018 * You should have received a copy of the GNU Lesser General Public License      *
00019 * along with this program.  If not, see <http://www.gnu.org/licenses/>          *
00020 ********************************************************************************/
00021 #ifndef FXREADWRITELOCK_H
00022 #define FXREADWRITELOCK_H
00023 
00024 
00025 namespace FX {
00026 
00027 
00038 class FXAPI FXReadWriteLock {
00039 private:
00040   volatile FXuval data[32];
00041 private:
00042   FXReadWriteLock(const FXReadWriteLock&);
00043   FXReadWriteLock &operator=(const FXReadWriteLock&);
00044 public:
00045 
00047   FXReadWriteLock();
00048 
00050   void readLock();
00051 
00053   FXbool tryReadLock();
00054 
00056   void readUnlock();
00057 
00059   FXbool readLocked();
00060 
00062   void writeLock();
00063 
00065   FXbool tryWriteLock();
00066 
00068   void writeUnlock();
00069 
00071   FXbool writeLocked();
00072 
00074  ~FXReadWriteLock();
00075   };
00076 
00077 
00079 class FXAPI FXScopedReadLock {
00080 private:
00081   FXReadWriteLock& rwlock;
00082 private:
00083   FXScopedReadLock();
00084   FXScopedReadLock(const FXScopedReadLock&);
00085   FXScopedReadLock& operator=(const FXScopedReadLock&);
00086 public:
00087 
00089   FXScopedReadLock(FXReadWriteLock& rwl):rwlock(rwl){ lock(); }
00090 
00092   FXReadWriteLock& readwritelock(){ return rwlock; }
00093 
00095   void lock(){ rwlock.readLock(); }
00096 
00098   FXbool trylock(){ return rwlock.tryReadLock(); }
00099 
00101   FXbool locked(){ return rwlock.readLocked(); }
00102 
00104   void unlock(){ rwlock.readUnlock(); }
00105 
00107   ~FXScopedReadLock(){ unlock(); }
00108   };
00109 
00110 
00111 
00113 class FXAPI FXScopedWriteLock {
00114 private:
00115   FXReadWriteLock& rwlock;
00116 private:
00117   FXScopedWriteLock();
00118   FXScopedWriteLock(const FXScopedWriteLock&);
00119   FXScopedWriteLock& operator=(const FXScopedWriteLock&);
00120 public:
00121 
00123   FXScopedWriteLock(FXReadWriteLock& rwl):rwlock(rwl){ lock(); }
00124 
00126   FXReadWriteLock& readwritelock(){ return rwlock; }
00127 
00129   void lock(){ rwlock.writeLock(); }
00130 
00132   FXbool trylock(){ return rwlock.tryWriteLock(); }
00133 
00135   FXbool locked(){ return rwlock.writeLocked(); }
00136 
00138   void unlock(){ rwlock.writeUnlock(); }
00139 
00141   ~FXScopedWriteLock(){ unlock(); }
00142   };
00143 
00144 }
00145 
00146 #endif
00147 

Copyright © 1997-2011 Jeroen van der Zijp