mirror of
https://github.com/pocoproject/poco.git
synced 2025-05-31 00:04:36 +02:00
trunk/branch integration: ScoppedRWLock
This commit is contained in:
parent
d32aea5dbe
commit
190dfbfde4
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user