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