Condition_T.inl

Go to the documentation of this file.
00001 // -*- C++ -*-
00002 //
00003 // Condition_T.inl,v 4.4 2006/05/09 07:19:10 jwillemsen Exp
00004 
00005 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00006 
00007 template<class MUTEX> ACE_INLINE int
00008 ACE_Condition<MUTEX>::remove (void)
00009 {
00010   // ACE_TRACE ("ACE_Condition<MUTEX>::remove");
00011 
00012   // cond_destroy() is called in a loop if the condition variable is
00013   // BUSY.  This avoids a condition where a condition is signaled and
00014   // because of some timing problem, the thread that is to be signaled
00015   // has called the cond_wait routine after the signal call.  Since
00016   // the condition signal is not queued in any way, deadlock occurs.
00017 
00018   int result = 0;
00019 
00020   while ((result = ACE_OS::cond_destroy (&this->cond_)) == -1
00021           && errno == EBUSY)
00022     {
00023       ACE_OS::cond_broadcast (&this->cond_);
00024       ACE_OS::thr_yield ();
00025     }
00026 
00027   return result;
00028 }
00029 
00030 template<class MUTEX> ACE_INLINE MUTEX &
00031 ACE_Condition<MUTEX>::mutex (void)
00032 {
00033   // ACE_TRACE ("ACE_Condition<MUTEX>::mutex");
00034   return this->mutex_;
00035 }
00036 
00037 template <class MUTEX> ACE_INLINE int
00038 ACE_Condition<MUTEX>::signal (void)
00039 {
00040 // ACE_TRACE ("ACE_Condition<MUTEX>::signal");
00041   return ACE_OS::cond_signal (&this->cond_);
00042 }
00043 
00044 template <class MUTEX> ACE_INLINE int
00045 ACE_Condition<MUTEX>::broadcast (void)
00046 {
00047 // ACE_TRACE ("ACE_Condition<MUTEX>::broadcast");
00048   return ACE_OS::cond_broadcast (&this->cond_);
00049 }
00050 
00051 ACE_END_VERSIONED_NAMESPACE_DECL

Generated on Thu Nov 9 09:41:48 2006 for ACE by doxygen 1.3.6