#include <ace/Synch_T.h>
template<class ACE_LOCKING_MECHANISM> class ACE_Reverse_Lock : public ACE_Lock {
public:typedef ACE_LOCKING_MECHANISM ACE_LOCK;ACE_Reverse_Lock (ACE_LOCKING_MECHANISM &lock);virtual ~ACE_Reverse_Lock (void);virtual int acquire (void);virtual int tryacquire (void);virtual int release (void);virtual int acquire_read (void);virtual int acquire_write (void);virtual int tryacquire_read (void);virtual int tryacquire_write (void);virtual int remove (void);private:ACE_LOCKING_MECHANISM &lock_;};
acquire on this class calls release
on the lock, and release on this class calls acquire on
the lock.
One motivation for this class is when we temporarily want to
release a lock (which we have already acquired) but then
reaquire it soon after. An alternative design would be to
add a Anti_Guard or Reverse_Guard class which would release
on construction and acquire destruction. However, there
are *many* varieties of the Guard class and this design
choice would lead to at least 6 new classes. One new
ACE_Reverse_Lock class seemed more reasonable.
ACE_Reverse_Lock (ACE_LOCKING_MECHANISM &lock);
lock.
virtual ~ACE_Reverse_Lock (void);
lock_ was not passed in by the user, it will be
deleted.
virtual int acquire (void);
virtual int tryacquire (void);
virtual int release (void);
virtual int acquire_read (void);
virtual int acquire_write (void);
virtual int tryacquire_read (void);
virtual int tryacquire_write (void);
virtual int remove (void);