version 1.2, 2006/08/09 21:12:42
|
version 1.5.2.2, 2007/11/08 23:20:48
|
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Mike Day (mdday@us.ibm.com) |
|
// |
|
// Reworked By: Mike Brasher (m.brasher@inovadevelopment.com) |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#ifndef Pegasus_ReadWriteSem_h | #ifndef Pegasus_ReadWriteSem_h |
|
|
| |
#if defined(PEGASUS_PLATFORM_AIX_RS_IBMCXX) | #if defined(PEGASUS_PLATFORM_AIX_RS_IBMCXX) |
# define PEGASUS_USE_POSIX_RWLOCK | # define PEGASUS_USE_POSIX_RWLOCK |
#elif defined(PEGASUS_PLATFORM_HPUX_ACC) |
#elif defined(PEGASUS_PLATFORM_PASE_ISERIES_IBMCXX) |
# define PEGASUS_USE_POSIX_RWLOCK | # define PEGASUS_USE_POSIX_RWLOCK |
#elif defined(PEGASUS_PLATFORM_OS400_ISERIES_IBM) |
#elif defined(PEGASUS_PLATFORM_HPUX_ACC) |
# define PEGASUS_USE_POSIX_RWLOCK | # define PEGASUS_USE_POSIX_RWLOCK |
#elif defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) | #elif defined(PEGASUS_PLATFORM_SOLARIS_SPARC_CC) |
# define PEGASUS_USE_POSIX_RWLOCK | # define PEGASUS_USE_POSIX_RWLOCK |
|
|
{ | { |
public: | public: |
| |
ReadLock(ReadWriteSem& rwsem) : _rwsem(rwsem) |
ReadLock(ReadWriteSem& rwsem, bool performLock = true) |
|
: _rwsem(rwsem), _performLock(performLock) |
{ | { |
|
if (_performLock) |
_rwsem.wait_read(Threads::self()); | _rwsem.wait_read(Threads::self()); |
} | } |
| |
~ReadLock() | ~ReadLock() |
{ | { |
|
if (_performLock) |
_rwsem.unlock_read(Threads::self()); | _rwsem.unlock_read(Threads::self()); |
} | } |
| |
private: | private: |
ReadWriteSem & _rwsem; | ReadWriteSem & _rwsem; |
|
bool _performLock; |
}; | }; |
| |
//============================================================================== | //============================================================================== |
|
|
{ | { |
public: | public: |
| |
WriteLock(ReadWriteSem& rwsem) : _rwsem(rwsem) |
WriteLock(ReadWriteSem& rwsem, bool performLock = true) |
|
: _rwsem(rwsem), _performLock(performLock) |
{ | { |
|
if (_performLock) |
_rwsem.wait_write(Threads::self()); | _rwsem.wait_write(Threads::self()); |
} | } |
| |
~WriteLock() | ~WriteLock() |
{ | { |
|
if (_performLock) |
_rwsem.unlock_write(Threads::self()); | _rwsem.unlock_write(Threads::self()); |
} | } |
| |
private: | private: |
ReadWriteSem & _rwsem; | ReadWriteSem & _rwsem; |
|
bool _performLock; |
}; | }; |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |