/* -*- C++ -*- */ // $Id$ // Synch_T.i #include "ace/Thread.h" template ACE_INLINE ACE_Lock_Adapter::ACE_Lock_Adapter (ACE_LOCKING_MECHANISM &lock) : lock_ (&lock), delete_lock_ (0) { } template ACE_INLINE ACE_Lock_Adapter::ACE_Lock_Adapter (void) : lock_ (0), delete_lock_ (1) { ACE_NEW (this->lock_, ACE_LOCKING_MECHANISM); } template ACE_INLINE ACE_Lock_Adapter::~ACE_Lock_Adapter (void) { if (this->delete_lock_) delete this->lock_; } // Explicitly destroy the lock. template ACE_INLINE int ACE_Lock_Adapter::remove (void) { return this->lock_->remove (); } // Block the thread until the lock is acquired. template ACE_INLINE int ACE_Lock_Adapter::acquire (void) { return this->lock_->acquire (); } // Conditionally acquire the lock (i.e., won't block). template ACE_INLINE int ACE_Lock_Adapter::tryacquire (void) { return this->lock_->tryacquire (); } // Release the lock. template ACE_INLINE int ACE_Lock_Adapter::release (void) { return this->lock_->release (); } // Block until the thread acquires a read lock. If the locking // mechanism doesn't support read locks then this just calls // . template ACE_INLINE int ACE_Lock_Adapter::acquire_read (void) { return this->lock_->acquire_read (); } // Block until the thread acquires a write lock. If the locking // mechanism doesn't support read locks then this just calls // . template ACE_INLINE int ACE_Lock_Adapter::acquire_write (void) { return this->lock_->acquire_write (); } // Conditionally acquire a read lock. If the locking mechanism // doesn't support read locks then this just calls . template ACE_INLINE int ACE_Lock_Adapter::tryacquire_read (void) { return this->lock_->tryacquire_read (); } // Conditionally acquire a write lock. If the locking mechanism // doesn't support write locks then this just calls . template ACE_INLINE int ACE_Lock_Adapter::tryacquire_write (void) { return this->lock_->tryacquire_write (); } #if defined (ACE_HAS_THREADS) template ACE_INLINE int ACE_Condition::remove (void) { // ACE_TRACE ("ACE_Condition::remove"); // cond_destroy() is called in a loop if the condition variable is // BUSY. This avoids a condition where a condition is signaled and // because of some timing problem, the thread that is to be signaled // has called the cond_wait routine after the signal call. Since // the condition signal is not queued in any way, deadlock occurs. int result = 0; while ((result = ACE_OS::cond_destroy (&this->cond_)) == -1 && errno == EBUSY) { ACE_OS::cond_broadcast (&this->cond_); ACE_OS::thr_yield (); } return result; } template ACE_INLINE MUTEX & ACE_Condition::mutex (void) { // ACE_TRACE ("ACE_Condition::mutex"); return this->mutex_; } template ACE_INLINE int ACE_Condition::signal (void) { // ACE_TRACE ("ACE_Condition::signal"); return ACE_OS::cond_signal (&this->cond_); } template ACE_INLINE int ACE_Condition::broadcast (void) { // ACE_TRACE ("ACE_Condition::broadcast"); return ACE_OS::cond_broadcast (&this->cond_); } #endif /* ACE_HAS_THREADS */ #if !(defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION))) template ACE_INLINE ACE_TSS::ACE_TSS (TYPE *type) : type_ (type) { } template ACE_INLINE TYPE * ACE_TSS::ts_object (void) const { return this->type_; } template ACE_INLINE TYPE * ACE_TSS::ts_object (TYPE *type) { this->type_ = type; return this->type_; } template ACE_INLINE TYPE * ACE_TSS::ts_get (void) const { return this->type_; } #endif /* ! (defined (ACE_HAS_THREADS) && (defined (ACE_HAS_THREAD_SPECIFIC_STORAGE) || defined (ACE_HAS_TSS_EMULATION))) */