mirror of
https://github.com/pocoproject/poco.git
synced 2024-12-12 10:13:51 +01:00
708a5d8307
* Remove _WIN32_WCE macro Poco now use C++17 and Windows CE does not support it and VS2017 does also not support it so we can just remove Windows CE code. First remove all macro usages from our own files. * Remove WinCE support from build files Poco now use C++17 and Windows CE does not support it and VS2017 does also not support it so we can just remove Windows CE code. Remove all references from build systems / scripts. * Remove Windows CE related source and header files Poco now use C++17 and Windows CE does not support it and VS2017 does also not support it so we can just remove Windows CE code. First remove all macro usages from our own files. * Remove wcelibcex folder Poco now use C++17 and Windows CE does not support it and VS2017 does also not support it so we can just remove Windows CE code. First remove all macro usages from our own files. * Remove rest Windows CE mentions There where some Windows CE mentions left. Remove those. * Update Windows CE documentation We should keep documentation some time so people can find reason for remove. --------- Co-authored-by: Kari Argillander <kari.argillander@fidelix.com>
200 lines
3.5 KiB
C++
200 lines
3.5 KiB
C++
//
|
|
// RWLock.h
|
|
//
|
|
// Library: Foundation
|
|
// Package: Threading
|
|
// Module: RWLock
|
|
//
|
|
// Definition of the RWLock class.
|
|
//
|
|
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
|
|
// and Contributors.
|
|
//
|
|
// SPDX-License-Identifier: BSL-1.0
|
|
//
|
|
|
|
|
|
#ifndef Foundation_RWLock_INCLUDED
|
|
#define Foundation_RWLock_INCLUDED
|
|
|
|
|
|
#include "Poco/Foundation.h"
|
|
#include "Poco/Exception.h"
|
|
|
|
|
|
#if defined(POCO_OS_FAMILY_WINDOWS)
|
|
#include "Poco/RWLock_WIN32.h"
|
|
#elif POCO_OS == POCO_OS_ANDROID
|
|
#include "Poco/RWLock_Android.h"
|
|
#elif defined(POCO_VXWORKS)
|
|
#include "Poco/RWLock_VX.h"
|
|
#else
|
|
#include "Poco/RWLock_POSIX.h"
|
|
#endif
|
|
|
|
|
|
namespace Poco {
|
|
|
|
|
|
class ScopedRWLock;
|
|
class ScopedReadRWLock;
|
|
class ScopedWriteRWLock;
|
|
|
|
|
|
class Foundation_API RWLock: private RWLockImpl
|
|
/// A reader writer lock allows multiple concurrent
|
|
/// readers or one exclusive writer.
|
|
{
|
|
public:
|
|
using ScopedLock = ScopedRWLock;
|
|
using ScopedReadLock = ScopedReadRWLock;
|
|
using ScopedWriteLock = ScopedWriteRWLock;
|
|
|
|
RWLock();
|
|
/// Creates the Reader/Writer lock.
|
|
|
|
~RWLock();
|
|
/// Destroys the Reader/Writer lock.
|
|
|
|
void readLock();
|
|
/// Acquires a read lock. If another thread currently holds a write lock,
|
|
/// waits until the write lock is released.
|
|
|
|
bool tryReadLock();
|
|
/// Tries to acquire a read lock. Immediately returns true if successful, or
|
|
/// false if another thread currently holds a write lock.
|
|
|
|
void writeLock();
|
|
/// Acquires a write lock. If one or more other threads currently hold
|
|
/// locks, waits until all locks are released. The results are undefined
|
|
/// if the same thread already holds a read or write lock
|
|
|
|
bool tryWriteLock();
|
|
/// Tries to acquire a write lock. Immediately returns true if successful,
|
|
/// or false if one or more other threads currently hold
|
|
/// locks. The result is undefined if the same thread already
|
|
/// holds a read or write lock.
|
|
|
|
void unlock();
|
|
/// Releases the read or write lock.
|
|
|
|
private:
|
|
RWLock(const RWLock&);
|
|
RWLock& operator = (const RWLock&);
|
|
};
|
|
|
|
|
|
class Foundation_API ScopedRWLock
|
|
/// A variant of ScopedLock for reader/writer locks.
|
|
{
|
|
public:
|
|
ScopedRWLock(RWLock& rwl, bool write = false);
|
|
~ScopedRWLock();
|
|
|
|
private:
|
|
RWLock& _rwl;
|
|
|
|
ScopedRWLock();
|
|
ScopedRWLock(const ScopedRWLock&);
|
|
ScopedRWLock& operator = (const ScopedRWLock&);
|
|
};
|
|
|
|
|
|
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
|
|
//
|
|
inline void RWLock::readLock()
|
|
{
|
|
readLockImpl();
|
|
}
|
|
|
|
|
|
inline bool RWLock::tryReadLock()
|
|
{
|
|
return tryReadLockImpl();
|
|
}
|
|
|
|
|
|
inline void RWLock::writeLock()
|
|
{
|
|
writeLockImpl();
|
|
}
|
|
|
|
|
|
inline bool RWLock::tryWriteLock()
|
|
{
|
|
return tryWriteLockImpl();
|
|
}
|
|
|
|
|
|
inline void RWLock::unlock()
|
|
{
|
|
unlockImpl();
|
|
}
|
|
|
|
|
|
inline ScopedRWLock::ScopedRWLock(RWLock& rwl, bool write): _rwl(rwl)
|
|
{
|
|
if (write)
|
|
_rwl.writeLock();
|
|
else
|
|
_rwl.readLock();
|
|
}
|
|
|
|
|
|
inline ScopedRWLock::~ScopedRWLock()
|
|
{
|
|
try
|
|
{
|
|
_rwl.unlock();
|
|
}
|
|
catch (...)
|
|
{
|
|
poco_unexpected();
|
|
}
|
|
}
|
|
|
|
|
|
inline ScopedReadRWLock::ScopedReadRWLock(RWLock& rwl): ScopedRWLock(rwl, false)
|
|
{
|
|
}
|
|
|
|
|
|
inline ScopedReadRWLock::~ScopedReadRWLock()
|
|
{
|
|
}
|
|
|
|
|
|
inline ScopedWriteRWLock::ScopedWriteRWLock(RWLock& rwl): ScopedRWLock(rwl, true)
|
|
{
|
|
}
|
|
|
|
|
|
inline ScopedWriteRWLock::~ScopedWriteRWLock()
|
|
{
|
|
}
|
|
|
|
|
|
} // namespace Poco
|
|
|
|
|
|
#endif // Foundation_RWLock_INCLUDED
|