NAME

ACE_Reverse_Lock - A reverse (or anti) lock.

SYNOPSIS

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

DESCRIPTION

This is an interesting adapter class that changes a lock into a reverse lock, i.e., 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.

Initialization/Finalization methods.

ACE_Reverse_Lock (ACE_LOCKING_MECHANISM &lock);

virtual ~ACE_Reverse_Lock (void);

Lock accessors.

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

AUTHOR

Doug Schmidt

LIBRARY

ace