trunk/branch integration: ScoppedRWLock

This commit is contained in:
Marian Krivos 2011-08-22 17:44:34 +00:00
parent d32aea5dbe
commit 190dfbfde4
2 changed files with 49 additions and 0 deletions

View File

@ -45,7 +45,13 @@
#if defined(POCO_OS_FAMILY_WINDOWS)
#if defined(_WIN32_WCE)
#include "Poco/RWLock_WINCE.h"
#else
#include "Poco/RWLock_WIN32.h"
#endif
#elif defined(POCO_VXWORKS)
#include "Poco/RWLock_VX.h"
#else
#include "Poco/RWLock_POSIX.h"
#endif
@ -55,6 +61,8 @@ namespace Poco {
class ScopedRWLock;
class ScopedReadRWLock;
class ScopedWriteRWLock;
class Foundation_API RWLock: private RWLockImpl
@ -63,6 +71,8 @@ class Foundation_API RWLock: private RWLockImpl
{
public:
typedef ScopedRWLock ScopedLock;
typedef ScopedReadRWLock ScopedReadLock;
typedef ScopedWriteRWLock ScopedWriteLock;
RWLock();
/// Creates the Reader/Writer lock.
@ -114,6 +124,24 @@ private:
};
class Foundation_API ScopedReadRWLock : public ScopedRWLock
/// A variant of ScopedLock for reader locks.
{
public:
ScopedReadRWLock(RWLock& rwl);
~ScopedReadRWLock();
};
class Foundation_API ScopedWriteRWLock : public ScopedRWLock
/// A variant of ScopedLock for writer locks.
{
public:
ScopedWriteRWLock(RWLock& rwl);
~ScopedWriteRWLock();
};
//
// inlines
//
@ -162,6 +190,26 @@ inline ScopedRWLock::~ScopedRWLock()
}
inline ScopedReadRWLock::ScopedReadRWLock(RWLock& rwl): ScopedRWLock(rwl, false)
{
}
inline ScopedReadRWLock::~ScopedReadRWLock()
{
}
inline ScopedWriteRWLock::ScopedWriteRWLock(RWLock& rwl): ScopedRWLock(rwl, true)
{
}
inline ScopedWriteRWLock::~ScopedWriteRWLock()
{
}
} // namespace Poco

View File

@ -62,6 +62,7 @@ protected:
private:
void addWriter();
void removeWriter();
DWORD tryReadLockOnce();
HANDLE _mutex;
HANDLE _readEvent;