#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);