ACE_Reverse_Lock< ACE_LOCKING_MECHANISM > Class Template Reference

A reverse (or anti) lock. More...

#include <Reverse_Lock_T.h>

Inheritance diagram for ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >:

Inheritance graph
[legend]
Collaboration diagram for ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >:

Collaboration graph
[legend]
List of all members.

Public Types

typedef ACE_LOCKING_MECHANISM ACE_LOCK

Public Member Functions

 ACE_Reverse_Lock (ACE_LOCKING_MECHANISM &lock, ACE_Acquire_Method::METHOD_TYPE acquire_method=ACE_Acquire_Method::ACE_REGULAR)
 Constructor. All locking requests will be forwarded to <lock>.
virtual ~ACE_Reverse_Lock (void)
virtual int acquire (void)
 Release the lock.
virtual int tryacquire (void)
 Release the lock.
virtual int release (void)
 Acquire the lock.
virtual int acquire_read (void)
 Release the lock.
virtual int acquire_write (void)
 Release the lock.
virtual int tryacquire_read (void)
 Release the lock.
virtual int tryacquire_write (void)
 Release the lock.
virtual int tryacquire_write_upgrade (void)
 Release the lock.
virtual int remove (void)
 Explicitly destroy the lock.

Private Attributes

ACE_LOCKING_MECHANISM & lock_
 The concrete locking mechanism that all the methods delegate to.
ACE_Acquire_Method::METHOD_TYPE acquire_method_
 This indicates what kind of acquire method will be called.

Detailed Description

template<class ACE_LOCKING_MECHANISM>
class ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >

A reverse (or anti) lock.

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 reacquire 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.

Definition at line 72 of file Reverse_Lock_T.h.


Member Typedef Documentation

template<class ACE_LOCKING_MECHANISM>
typedef ACE_LOCKING_MECHANISM ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::ACE_LOCK

Definition at line 76 of file Reverse_Lock_T.h.


Constructor & Destructor Documentation

template<class ACE_LOCKING_MECHANISM>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::ACE_Reverse_Lock ( ACE_LOCKING_MECHANISM &  lock,
ACE_Acquire_Method::METHOD_TYPE  acquire_method = ACE_Acquire_Method::ACE_REGULAR 
)

Constructor. All locking requests will be forwarded to <lock>.

Definition at line 11 of file Reverse_Lock_T.inl.

00014   : lock_ (lock),
00015     acquire_method_ (acquire_method)
00016 {
00017 }

template<class ACE_LOCKING_MECHANISM>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::~ACE_Reverse_Lock ( void   )  [virtual]

Destructor. If <lock_> was not passed in by the user, it will be deleted.

Definition at line 19 of file Reverse_Lock_T.cpp.

00020 {
00021 }


Member Function Documentation

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::acquire ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 32 of file Reverse_Lock_T.cpp.

References ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::lock_.

00033 {
00034   return this->lock_.release ();
00035 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::acquire_read ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 58 of file Reverse_Lock_T.cpp.

References ACE_NOTSUP_RETURN.

00059 {
00060   ACE_NOTSUP_RETURN (-1);
00061 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::acquire_write ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 65 of file Reverse_Lock_T.cpp.

References ACE_NOTSUP_RETURN.

00066 {
00067   ACE_NOTSUP_RETURN (-1);
00068 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::release ( void   )  [virtual]

Acquire the lock.

Implements ACE_Lock.

Definition at line 46 of file Reverse_Lock_T.cpp.

References ACE_Acquire_Method::ACE_READ, ACE_Acquire_Method::ACE_WRITE, and ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::lock_.

00047 {
00048   if (this->acquire_method_ == ACE_Acquire_Method::ACE_READ)
00049     return this->lock_.acquire_read ();
00050   else if (this->acquire_method_ == ACE_Acquire_Method::ACE_WRITE)
00051     return this->lock_.acquire_write ();
00052   else
00053     return this->lock_.acquire ();
00054 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::remove ( void   )  [virtual]

Explicitly destroy the lock.

Implements ACE_Lock.

Definition at line 25 of file Reverse_Lock_T.cpp.

References ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::lock_.

00026 {
00027   return this->lock_.remove ();
00028 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::tryacquire ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 39 of file Reverse_Lock_T.cpp.

References ACE_NOTSUP_RETURN.

00040 {
00041   ACE_NOTSUP_RETURN (-1);
00042 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::tryacquire_read ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 72 of file Reverse_Lock_T.cpp.

References ACE_NOTSUP_RETURN.

00073 {
00074   ACE_NOTSUP_RETURN (-1);
00075 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::tryacquire_write ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 79 of file Reverse_Lock_T.cpp.

References ACE_NOTSUP_RETURN.

00080 {
00081   ACE_NOTSUP_RETURN (-1);
00082 }

template<class ACE_LOCKING_MECHANISM>
int ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::tryacquire_write_upgrade ( void   )  [virtual]

Release the lock.

Implements ACE_Lock.

Definition at line 86 of file Reverse_Lock_T.cpp.

References ACE_NOTSUP_RETURN.

00087 {
00088   ACE_NOTSUP_RETURN (-1);
00089 }


Member Data Documentation

template<class ACE_LOCKING_MECHANISM>
ACE_Acquire_Method::METHOD_TYPE ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::acquire_method_ [private]

This indicates what kind of acquire method will be called.

Definition at line 121 of file Reverse_Lock_T.h.

template<class ACE_LOCKING_MECHANISM>
ACE_LOCKING_MECHANISM& ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::lock_ [private]

The concrete locking mechanism that all the methods delegate to.

Definition at line 118 of file Reverse_Lock_T.h.

Referenced by ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::acquire(), ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::release(), and ACE_Reverse_Lock< ACE_LOCKING_MECHANISM >::remove().


The documentation for this class was generated from the following files:
Generated on Tue Feb 2 17:35:31 2010 for ACE by  doxygen 1.4.7