summaryrefslogtreecommitdiff
path: root/cpp/include/IceUtil/RWRecMutex.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/IceUtil/RWRecMutex.h')
-rw-r--r--cpp/include/IceUtil/RWRecMutex.h401
1 files changed, 0 insertions, 401 deletions
diff --git a/cpp/include/IceUtil/RWRecMutex.h b/cpp/include/IceUtil/RWRecMutex.h
deleted file mode 100644
index 7dc7f1e8164..00000000000
--- a/cpp/include/IceUtil/RWRecMutex.h
+++ /dev/null
@@ -1,401 +0,0 @@
-// **********************************************************************
-//
-// Copyright (c) 2003-2011 ZeroC, Inc. All rights reserved.
-//
-// This copy of Ice is licensed to you under the terms described in the
-// ICE_LICENSE file included in this distribution.
-//
-// **********************************************************************
-
-#ifndef ICE_UTIL_RW_REC_MUTEX_H
-#define ICE_UTIL_RW_REC_MUTEX_H
-
-#include <IceUtil/Mutex.h>
-#include <IceUtil/Cond.h>
-#include <IceUtil/Thread.h>
-
-namespace IceUtil
-{
-
-//
-// All classes defined in this file are now deprecated.
-//
-
-class ICE_UTIL_API DeadlockException : public Exception
-{
-public:
-
- ICE_DEPRECATED_API DeadlockException(const char*, int);
- ICE_DEPRECATED_API virtual std::string ice_name() const;
- ICE_DEPRECATED_API virtual Exception* ice_clone() const;
- ICE_DEPRECATED_API virtual void ice_throw() const;
-
-private:
-
- static const char* _name;
-};
-
-template <typename T>
-class RLockT
-{
-public:
-
- ICE_DEPRECATED_API RLockT(const T& mutex) :
- _mutex(mutex)
- {
- _mutex.readLock();
- _acquired = true;
- }
-
- ICE_DEPRECATED_API ~RLockT()
- {
- if (_acquired)
- {
- _mutex.unlock();
- }
- }
-
- ICE_DEPRECATED_API void acquire() const
- {
- if (_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _mutex.readLock();
- _acquired = true;
- }
-
- ICE_DEPRECATED_API bool tryAcquire() const
- {
- if (_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _acquired = _mutex.tryReadLock();
- return _acquired;
- }
-
- ICE_DEPRECATED_API bool timedAcquire(const Time& timeout) const
- {
- if (_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _acquired = _mutex.timedReadLock(timeout);
- return _acquired;
- }
-
- ICE_DEPRECATED_API void release() const
- {
- if (!_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _mutex.unlock();
- _acquired = false;
- }
-
- ICE_DEPRECATED_API bool acquired() const
- {
- return _acquired;
- }
-
- ICE_DEPRECATED_API void
- upgrade() const
- {
- _mutex.upgrade();
- }
-
- ICE_DEPRECATED_API bool
- timedUpgrade(const Time& timeout) const
- {
- return _mutex.timedUpgrade(timeout);
- }
-
- ICE_DEPRECATED_API void
- downgrade() const
- {
- _mutex.downgrade();
- }
-
-protected:
-
- // TryRLockT's constructors
-
- RLockT(const T& mutex, bool) :
- _mutex(mutex)
- {
- _acquired = _mutex.tryReadLock();
- }
-
-
- RLockT(const T& mutex, const Time& timeout) :
- _mutex(mutex)
- {
- _acquired = _mutex.timedReadLock(timeout);
- }
-
-
-private:
-
- // Not implemented; prevents accidental use.
- //
- RLockT(const RLockT&);
- RLockT& operator=(const RLockT&);
-
- const T& _mutex;
- mutable bool _acquired;
-};
-
-template <typename T>
-class TryRLockT : public RLockT<T>
-{
-public:
-
- ICE_DEPRECATED_API TryRLockT(const T& mutex) :
- RLockT<T>(mutex, true)
- {
- }
-
- ICE_DEPRECATED_API TryRLockT(const T& mutex, const Time& timeout) :
- RLockT<T>(mutex, timeout)
- {
- }
-};
-
-template <typename T>
-class WLockT
-{
-public:
-
- ICE_DEPRECATED_API WLockT(const T& mutex) :
- _mutex(mutex)
- {
- _mutex.writeLock();
- _acquired = true;
- }
-
- ICE_DEPRECATED_API ~WLockT()
- {
- if(_acquired)
- {
- _mutex.unlock();
- }
- }
-
- ICE_DEPRECATED_API void acquire() const
- {
- if (_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _mutex.writeLock();
- _acquired = true;
- }
-
- ICE_DEPRECATED_API bool tryAcquire() const
- {
- if (_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _acquired = _mutex.tryWriteLock();
- return _acquired;
- }
-
- ICE_DEPRECATED_API bool timedAcquire(const Time& timeout) const
- {
- if (_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _acquired = _mutex.timedWriteLock(timeout);
- return _acquired;
- }
-
- ICE_DEPRECATED_API void release() const
- {
- if (!_acquired)
- {
- throw ThreadLockedException(__FILE__, __LINE__);
- }
- _mutex.unlock();
- _acquired = false;
- }
-
- ICE_DEPRECATED_API bool acquired() const
- {
- return _acquired;
- }
-
-protected:
-
- // TryWLockT's constructor
-
- WLockT(const T& mutex, bool) :
- _mutex(mutex)
- {
- _acquired = _mutex.tryWriteLock();
- }
-
- WLockT(const T& mutex, const Time& timeout) :
- _mutex(mutex)
- {
- _acquired = _mutex.timedWriteLock(timeout);
- }
-
-private:
-
- // Not implemented; prevents accidental use.
- //
- WLockT(const WLockT&);
- WLockT& operator=(const WLockT&);
-
- const T& _mutex;
- mutable bool _acquired;
-};
-
-template <typename T>
-class TryWLockT : public WLockT<T>
-{
-public:
-
- ICE_DEPRECATED_API TryWLockT(const T& mutex) :
- WLockT<T>(mutex, true)
- {
- }
-
- ICE_DEPRECATED_API TryWLockT(const T& mutex, const Time& timeout) :
- WLockT<T>(mutex, timeout)
- {
- }
-};
-
-//
-// Concurrency primitive that allows many readers & one writer access
-// to a data structure. Writers have priority over readers. The
-// structure is not strictly fair in that there is no absolute queue
-// of waiting writers - that is managed by a condition variable.
-//
-// Both Reader & Writer mutexes can be recursively locked. Calling
-// upgrade() or timedUpgrade() while holding a read lock promotes
-// the reader to a writer lock.
-//
-
-class ICE_UTIL_API RWRecMutex
-{
-public:
-
- //
- // RLock (reader) & WLock (writer) typedefs.
- //
- typedef RLockT<RWRecMutex> RLock;
- typedef TryRLockT<RWRecMutex> TryRLock;
- typedef WLockT<RWRecMutex> WLock;
- typedef TryWLockT<RWRecMutex> TryWLock;
-
- ICE_DEPRECATED_API RWRecMutex();
- ICE_DEPRECATED_API ~RWRecMutex();
-
- //
- // Note that readLock/writeLock & unlock in general should not be
- // used directly. Instead use RLock & WLock.
- //
-
- //
- // Acquire a read lock.
- //
- ICE_DEPRECATED_API void readLock() const;
-
- //
- // Try to acquire a read lock.
- //
- ICE_DEPRECATED_API bool tryReadLock() const;
-
- //
- // Try to acquire a read lock for upto the given timeout.
- //
- ICE_DEPRECATED_API bool timedReadLock(const Time&) const;
-
- //
- // Acquire a write lock.
- //
- ICE_DEPRECATED_API void writeLock() const;
-
- //
- // Acquire a write lock.
- //
- ICE_DEPRECATED_API bool tryWriteLock() const;
-
- //
- // Acquire a write lock for up to the given timeout.
- //
- ICE_DEPRECATED_API bool timedWriteLock(const Time&) const;
-
- //
- // Unlock the reader/writer lock.
- //
- ICE_DEPRECATED_API void unlock() const;
-
- //
- // Upgrade the read lock to a writer lock. Note that this method
- // can only be called if the reader lock is not held recursively.
- //
- ICE_DEPRECATED_API void upgrade() const;
-
- //
- // Upgrade the read lock to a writer lock for up to the given
- // timeout Note that this method can only be called if the reader
- // lock is not held recursively.
- //
- ICE_DEPRECATED_API bool timedUpgrade(const Time&) const;
-
- //
- // Downgrade a write lock to a read lock.
- //
- ICE_DEPRECATED_API void downgrade() const;
-
-private:
-
- // noncopyable
- RWRecMutex(const RWRecMutex&);
- void operator=(const RWRecMutex&);
-
- //
- // Number of readers holding the lock. A positive number indicates
- // readers are active. A negative number means that a writer is
- // active and indicates the number of times writeLock() was called.
- //
- mutable int _count;
-
- //
- // If there is an active writer this is the ID of the writer thread.
- //
- mutable ThreadControl _writerId;
-
- //
- // Number of waiting writers (including any upgrader).
- //
- mutable unsigned int _waitingWriters;
-
- //
- // True if an upgrader wants the lock.
- //
- mutable bool _upgrading;
-
- //
- // Internal mutex.
- //
- Mutex _mutex;
-
- //
- // Condition variables for waiting readers, writers, and upgrader.
- //
- mutable Cond _readers;
- mutable Cond _writers;
- mutable Cond _upgrader;
-};
-
-} // End namespace IceUtil
-
-#endif