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(POCO_OS_FAMILY_WINDOWS)
#if defined(_WIN32_WCE)
#include "Poco/RWLock_WINCE.h"
#else
#include "Poco/RWLock_WIN32.h" #include "Poco/RWLock_WIN32.h"
#endif
#elif defined(POCO_VXWORKS)
#include "Poco/RWLock_VX.h"
#else #else
#include "Poco/RWLock_POSIX.h" #include "Poco/RWLock_POSIX.h"
#endif #endif
@ -55,6 +61,8 @@ namespace Poco {
class ScopedRWLock; class ScopedRWLock;
class ScopedReadRWLock;
class ScopedWriteRWLock;
class Foundation_API RWLock: private RWLockImpl class Foundation_API RWLock: private RWLockImpl
@ -63,6 +71,8 @@ class Foundation_API RWLock: private RWLockImpl
{ {
public: public:
typedef ScopedRWLock ScopedLock; typedef ScopedRWLock ScopedLock;
typedef ScopedReadRWLock ScopedReadLock;
typedef ScopedWriteRWLock ScopedWriteLock;
RWLock(); RWLock();
/// Creates the Reader/Writer lock. /// 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 // 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 } // namespace Poco

View File

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