ACE_Guard< ACE_LOCK > Class Template Reference

This data structure is meant to be used within a method or function... It performs automatic aquisition and release of a parameterized synchronization object <ACE_LOCK>. More...

#include <Guard_T.h>

Inheritance diagram for ACE_Guard< ACE_LOCK >:

Inheritance graph
[legend]
Collaboration diagram for ACE_Guard< ACE_LOCK >:

Collaboration graph
[legend]
List of all members.

Public Member Functions

 ACE_Guard (ACE_LOCK &l)
 ACE_Guard (ACE_LOCK &l, int block)
 ACE_Guard (ACE_LOCK &l, int block, int become_owner)
 ~ACE_Guard (void)
 Implicitly release the lock.
int acquire (void)
 Explicitly acquire the lock.
int tryacquire (void)
 Conditionally acquire the lock (i.e., won't block).
int release (void)
 Explicitly release the lock, but only if it is held!
void disown (void)
int locked (void) const
int remove (void)
 Explicitly remove the lock.
void dump (void) const
 Dump the state of an object.

Protected Member Functions

 ACE_Guard (ACE_LOCK *lock)
 Helper, meant for subclass only.

Protected Attributes

ACE_LOCK * lock_
 Pointer to the ACE_LOCK we're guarding.
int owner_
 Keeps track of whether we acquired the lock or failed.

Private Member Functions

void operator= (const ACE_Guard< ACE_LOCK > &)
 ACE_Guard (const ACE_Guard< ACE_LOCK > &)

Detailed Description

template<class ACE_LOCK>
class ACE_Guard< ACE_LOCK >

This data structure is meant to be used within a method or function... It performs automatic aquisition and release of a parameterized synchronization object <ACE_LOCK>.

The <ACE_LOCK> class given as an actual parameter must provide at the very least the <acquire>, <tryacquire>, <release>, and <remove> methods.

Definition at line 42 of file Guard_T.h.


Constructor & Destructor Documentation

template<class ACE_LOCK>
ACE_INLINE ACE_Guard< ACE_LOCK >::ACE_Guard ( ACE_LOCK &  l  ) 

Definition at line 34 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::acquire().

00035   : lock_ (&l),
00036     owner_ (0)
00037 {
00038   this->acquire ();
00039 }

template<class ACE_LOCK>
ACE_INLINE ACE_Guard< ACE_LOCK >::ACE_Guard ( ACE_LOCK &  l,
int  block 
)

Implicitly and automatically acquire (or try to acquire) the lock. If block is non-0 then <acquire> the <ACE_LOCK>, else <tryacquire> it.

Definition at line 42 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::acquire(), and ACE_Guard< ACE_LOCK >::tryacquire().

00043   : lock_ (&l),
00044     owner_ (0)
00045 {
00046   if (block)
00047     this->acquire ();
00048   else
00049     this->tryacquire ();
00050 }

template<class ACE_LOCK>
ACE_INLINE ACE_Guard< ACE_LOCK >::ACE_Guard ( ACE_LOCK &  l,
int  block,
int  become_owner 
)

Initialise the guard without implicitly acquiring the lock. The <become_owner> parameter indicates whether the guard should release the lock implicitly on destruction. The <block> parameter is ignored and is used here to disambiguate with the preceding constructor.

Definition at line 53 of file Guard_T.inl.

00054   : lock_ (&l),
00055     owner_ (become_owner == 0 ? -1 : 0)
00056 {
00057 }

template<class ACE_LOCK>
ACE_INLINE ACE_Guard< ACE_LOCK >::~ACE_Guard ( void   ) 

Implicitly release the lock.

Definition at line 63 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::release().

00064 {
00065   this->release ();
00066 }

template<class ACE_LOCK>
ACE_Guard< ACE_LOCK >::ACE_Guard ( ACE_LOCK *  lock  )  [inline, protected]

Helper, meant for subclass only.

Definition at line 96 of file Guard_T.h.

00096 : lock_ (lock) {}

template<class ACE_LOCK>
ACE_Guard< ACE_LOCK >::ACE_Guard ( const ACE_Guard< ACE_LOCK > &   )  [private]


Member Function Documentation

template<class ACE_LOCK>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL ACE_INLINE int ACE_Guard< ACE_LOCK >::acquire ( void   ) 

Explicitly acquire the lock.

Reimplemented in ACE_Write_Guard< ACE_LOCK >, and ACE_Read_Guard< ACE_LOCK >.

Definition at line 10 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::lock_, and ACE_Guard< ACE_LOCK >::owner_.

Referenced by ACE_Guard< ACE_LOCK >::ACE_Guard().

00011 {
00012   return this->owner_ = this->lock_->acquire ();
00013 }

template<class ACE_LOCK>
ACE_INLINE void ACE_Guard< ACE_LOCK >::disown ( void   ) 

Relinquish ownership of the lock so that it is not released implicitly in the destructor.

Definition at line 81 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::owner_.

00082 {
00083   this->owner_ = -1;
00084 }

template<class ACE_LOCK>
ACE_BEGIN_VERSIONED_NAMESPACE_DECL void ACE_Guard< ACE_LOCK >::dump ( void   )  const

Dump the state of an object.

Reimplemented in ACE_Write_Guard< ACE_LOCK >, and ACE_Read_Guard< ACE_LOCK >.

Definition at line 27 of file Guard_T.cpp.

References ACE_BEGIN_DUMP, ACE_DEBUG, ACE_END_DUMP, ACE_TEXT, and LM_DEBUG.

Referenced by ACE_Read_Guard< ACE_LOCK >::dump(), and ACE_Write_Guard< ACE_LOCK >::dump().

00028 {
00029 #if defined (ACE_HAS_DUMP)
00030 // ACE_TRACE ("ACE_Guard<ACE_LOCK>::dump");
00031 
00032   ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));
00033   ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("mutex_ = %x\n"), this->lock_));
00034   ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("owner_ = %d\n"), this->owner_));
00035   ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));
00036 #endif /* ACE_HAS_DUMP */
00037 }

template<class ACE_LOCK>
ACE_INLINE int ACE_Guard< ACE_LOCK >::locked ( void   )  const

1 if locked, 0 if couldn't acquire the lock (errno will contain the reason for this).

Definition at line 69 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::owner_.

00070 {
00071   return this->owner_ != -1;
00072 }

template<class ACE_LOCK>
void ACE_Guard< ACE_LOCK >::operator= ( const ACE_Guard< ACE_LOCK > &   )  [private]

template<class ACE_LOCK>
ACE_INLINE int ACE_Guard< ACE_LOCK >::release ( void   ) 

Explicitly release the lock, but only if it is held!

Definition at line 22 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::lock_, and ACE_Guard< ACE_LOCK >::owner_.

Referenced by ACE_Guard< ACE_LOCK >::~ACE_Guard().

00023 {
00024   if (this->owner_ == -1)
00025     return -1;
00026   else
00027     {
00028       this->owner_ = -1;
00029       return this->lock_->release ();
00030     }
00031 }

template<class ACE_LOCK>
ACE_INLINE int ACE_Guard< ACE_LOCK >::remove ( void   ) 

Explicitly remove the lock.

Definition at line 75 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::lock_.

00076 {
00077   return this->lock_->remove ();
00078 }

template<class ACE_LOCK>
ACE_INLINE int ACE_Guard< ACE_LOCK >::tryacquire ( void   ) 

Conditionally acquire the lock (i.e., won't block).

Reimplemented in ACE_Write_Guard< ACE_LOCK >, and ACE_Read_Guard< ACE_LOCK >.

Definition at line 16 of file Guard_T.inl.

References ACE_Guard< ACE_LOCK >::lock_, and ACE_Guard< ACE_LOCK >::owner_.

Referenced by ACE_Guard< ACE_LOCK >::ACE_Guard().

00017 {
00018   return this->owner_ = this->lock_->tryacquire ();
00019 }


Member Data Documentation

template<class ACE_LOCK>
ACE_LOCK* ACE_Guard< ACE_LOCK >::lock_ [protected]

Pointer to the ACE_LOCK we're guarding.

Definition at line 99 of file Guard_T.h.

Referenced by ACE_Read_Guard< ACE_LOCK >::acquire(), ACE_Write_Guard< ACE_LOCK >::acquire(), ACE_Guard< ACE_LOCK >::acquire(), ACE_Read_Guard< ACE_LOCK >::acquire_read(), ACE_Write_Guard< ACE_LOCK >::acquire_write(), ACE_Guard< ACE_LOCK >::release(), ACE_Guard< ACE_LOCK >::remove(), ACE_Read_Guard< ACE_LOCK >::tryacquire(), ACE_Write_Guard< ACE_LOCK >::tryacquire(), ACE_Guard< ACE_LOCK >::tryacquire(), ACE_Read_Guard< ACE_LOCK >::tryacquire_read(), and ACE_Write_Guard< ACE_LOCK >::tryacquire_write().

template<class ACE_LOCK>
int ACE_Guard< ACE_LOCK >::owner_ [protected]

Keeps track of whether we acquired the lock or failed.

Definition at line 102 of file Guard_T.h.

Referenced by ACE_Read_Guard< ACE_LOCK >::acquire(), ACE_Write_Guard< ACE_LOCK >::acquire(), ACE_Guard< ACE_LOCK >::acquire(), ACE_Read_Guard< ACE_LOCK >::acquire_read(), ACE_Write_Guard< ACE_LOCK >::acquire_write(), ACE_Guard< ACE_LOCK >::disown(), ACE_Guard< ACE_LOCK >::locked(), ACE_Guard< ACE_LOCK >::release(), ACE_Read_Guard< ACE_LOCK >::tryacquire(), ACE_Write_Guard< ACE_LOCK >::tryacquire(), ACE_Guard< ACE_LOCK >::tryacquire(), ACE_Read_Guard< ACE_LOCK >::tryacquire_read(), and ACE_Write_Guard< ACE_LOCK >::tryacquire_write().


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