version 1.5.2.2, 2007/11/08 23:20:48
|
version 1.6, 2008/03/05 22:25:17
|
|
|
wait(PEG_SEM_WRITE, caller); | wait(PEG_SEM_WRITE, caller); |
} | } |
| |
// @exception Deadlock |
|
// @exception Permission |
|
// @exception AlreadyLocked |
|
// @exception WaitFailed |
|
inline void try_wait_read(ThreadType caller) |
|
{ |
|
try_wait(PEG_SEM_READ, caller); |
|
} |
|
|
|
// @exception Deadlock |
|
// @exception Permission |
|
// @exception AlreadyLocked |
|
// @exception WaitFailed |
|
inline void try_wait_write(ThreadType caller) |
|
{ |
|
try_wait(PEG_SEM_WRITE, caller); |
|
} |
|
|
|
// @exception Deadlock |
|
// @exception Permission |
|
// @exception TimeOut |
|
// @exception WaitFailed |
|
inline void timed_wait_read(ThreadType caller, int milliseconds) |
|
{ |
|
timed_wait(PEG_SEM_READ, caller, milliseconds); |
|
} |
|
|
|
// @exception Deadlock |
|
// @exception Permission |
|
// @exception TimeOut |
|
// @exception WaitFailed |
|
inline void timed_wait_write(ThreadType caller, int milliseconds) |
|
{ |
|
timed_wait(PEG_SEM_WRITE, caller, milliseconds); |
|
} |
|
|
|
// @exception Permission | // @exception Permission |
inline void unlock_read(ThreadType caller) | inline void unlock_read(ThreadType caller) |
{ | { |
|
|
// @exception TooManyReaders | // @exception TooManyReaders |
void wait(Uint32 mode, ThreadType caller); | void wait(Uint32 mode, ThreadType caller); |
| |
// @exception Deadlock |
|
// @exception Permission |
|
// @exception WaitFailed |
|
// @exception TooManyReaders |
|
void try_wait(Uint32 mode, ThreadType caller); |
|
|
|
// @exception Timeout |
|
// @exception Deadlock |
|
// @exception Permission |
|
// @exception WaitFailed |
|
// @exception TooManyReaders |
|
void timed_wait(Uint32 mode, ThreadType caller, int milliseconds); |
|
|
|
// @exception Permission | // @exception Permission |
void unlock(Uint32 mode, ThreadType caller); | void unlock(Uint32 mode, ThreadType caller); |
| |
|
|
{ | { |
public: | public: |
| |
ReadLock(ReadWriteSem& rwsem, bool performLock = true) |
ReadLock(ReadWriteSem& rwsem) : _rwsem(rwsem) |
: _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, bool performLock = true) |
WriteLock(ReadWriteSem& rwsem) : _rwsem(rwsem) |
: _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 |