ACE_Thread_Mutex wrapper (only valid for threads in the same process). More...
#include <Thread_Mutex.h>
Public Member Functions | |
| ACE_Thread_Mutex (const ACE_TCHAR *name=0, ACE_mutexattr_t *attributes=0) | |
| Constructor. | |
| ~ACE_Thread_Mutex (void) | |
| Implicitly destroy the mutex. | |
| int | remove (void) |
| int | acquire (void) |
| Acquire lock ownership (wait on queue if necessary). | |
| int | acquire (ACE_Time_Value &tv) |
| int | acquire (ACE_Time_Value *tv) |
| int | tryacquire (void) |
| int | release (void) |
| Release lock and unblock a thread at head of queue. | |
| int | acquire_read (void) |
| int | acquire_write (void) |
| int | tryacquire_read (void) |
| int | tryacquire_write (void) |
| int | tryacquire_write_upgrade (void) |
| const ACE_thread_mutex_t & | lock (void) const |
| Return the underlying mutex. | |
| void | dump (void) const |
| Dump the state of an object. | |
Public Attributes | |
| ACE_ALLOC_HOOK_DECLARE | |
| Declare the dynamic allocation hooks. | |
| ACE_thread_mutex_t | lock_ |
| Mutex type that supports single-process locking efficiently. | |
| bool | removed_ |
Private Member Functions | |
| void | operator= (const ACE_Thread_Mutex &) |
| ACE_Thread_Mutex (const ACE_Thread_Mutex &) | |
Friends | |
| class | ACE_Condition_Thread_Mutex |
ACE_Thread_Mutex wrapper (only valid for threads in the same process).
This implementation is optimized for locking threads that are in the same process. It maps to <CRITICAL_SECTION>s on NT and <ACE_mutex_t> with <type> set to <USYNC_THREAD> on UNIX. ACE_Thread_Mutex is recursive on some platforms (like Win32). However, on most platforms (like Solaris) it is not recursive. To be totally safe and portable, developers should use ACE_Recursive_Thread_Mutex when they need a recursive mutex.
Definition at line 50 of file Thread_Mutex.h.
| ACE_Thread_Mutex::ACE_Thread_Mutex | ( | const ACE_TCHAR * | name = 0, |
|
| ACE_mutexattr_t * | attributes = 0 | |||
| ) |
Constructor.
| ACE_Thread_Mutex::~ACE_Thread_Mutex | ( | void | ) |
Implicitly destroy the mutex.
| ACE_Thread_Mutex::ACE_Thread_Mutex | ( | const ACE_Thread_Mutex & | ) | [private] |
| int ACE_Thread_Mutex::acquire | ( | ACE_Time_Value * | tv | ) |
If tv == 0 the call <acquire()> directly. Otherwise, Block the thread until we acquire the mutex or until tv times out, in which case -1 is returned with errno == ETIME. Note that tv is assumed to be in "absolute" rather than "relative" time. The value of tv is updated upon return to show the actual (absolute) acquisition time.
Definition at line 64 of file Thread_Mutex.inl.
00065 { 00066 // ACE_TRACE ("ACE_Thread_Mutex::acquire"); 00067 return ACE_OS::thread_mutex_lock (&this->lock_, tv); 00068 }
| int ACE_Thread_Mutex::acquire | ( | ACE_Time_Value & | tv | ) |
Block the thread until we acquire the mutex or until tv times out, in which case -1 is returned with errno == ETIME. Note that tv is assumed to be in "absolute" rather than "relative" time. The value of tv is updated upon return to show the actual (absolute) acquisition time.
Definition at line 57 of file Thread_Mutex.inl.
00058 { 00059 // ACE_TRACE ("ACE_Thread_Mutex::acquire"); 00060 return ACE_OS::thread_mutex_lock (&this->lock_, tv); 00061 }
| int ACE_Thread_Mutex::acquire | ( | void | ) |
Acquire lock ownership (wait on queue if necessary).
Definition at line 50 of file Thread_Mutex.inl.
00051 { 00052 // ACE_TRACE ("ACE_Thread_Mutex::acquire"); 00053 return ACE_OS::thread_mutex_lock (&this->lock_); 00054 }
| int ACE_Thread_Mutex::acquire_read | ( | void | ) |
Acquire mutex ownership. This calls acquire() and is only here to make the ACE_Thread_Mutex interface consistent with the other synchronization APIs.
Definition at line 15 of file Thread_Mutex.inl.
00016 { 00017 // ACE_TRACE ("ACE_Thread_Mutex::acquire_read"); 00018 return ACE_OS::thread_mutex_lock (&this->lock_); 00019 }
| int ACE_Thread_Mutex::acquire_write | ( | void | ) |
Acquire mutex ownership. This calls acquire() and is only here to make the ACE_Thread_Mutex interface consistent with the other synchronization APIs.
Definition at line 22 of file Thread_Mutex.inl.
00023 { 00024 // ACE_TRACE ("ACE_Thread_Mutex::acquire_write"); 00025 return ACE_OS::thread_mutex_lock (&this->lock_); 00026 }
| void ACE_Thread_Mutex::dump | ( | void | ) | const |
Dump the state of an object.
| const ACE_thread_mutex_t & ACE_Thread_Mutex::lock | ( | void | ) | const |
Return the underlying mutex.
Definition at line 8 of file Thread_Mutex.inl.
00009 { 00010 // ACE_TRACE ("ACE_Thread_Mutex::lock"); 00011 return this->lock_; 00012 }
| void ACE_Thread_Mutex::operator= | ( | const ACE_Thread_Mutex & | ) | [private] |
| int ACE_Thread_Mutex::release | ( | void | ) |
Release lock and unblock a thread at head of queue.
Definition at line 78 of file Thread_Mutex.inl.
00079 { 00080 // ACE_TRACE ("ACE_Thread_Mutex::release"); 00081 return ACE_OS::thread_mutex_unlock (&this->lock_); 00082 }
| int ACE_Thread_Mutex::remove | ( | void | ) |
Explicitly destroy the mutex. Note that only one thread should call this method since it doesn't protect against race conditions.
Definition at line 85 of file Thread_Mutex.inl.
00086 { 00087 // ACE_TRACE ("ACE_Thread_Mutex::remove"); 00088 int result = 0; 00089 if (!this->removed_) 00090 { 00091 this->removed_ = true; 00092 result = ACE_OS::thread_mutex_destroy (&this->lock_); 00093 } 00094 return result; 00095 }
| int ACE_Thread_Mutex::tryacquire | ( | void | ) |
Conditionally acquire lock (i.e., don't wait on queue). Returns -1 on failure. If we "failed" because someone else already had the lock, errno is set to EBUSY.
Definition at line 71 of file Thread_Mutex.inl.
00072 { 00073 // ACE_TRACE ("ACE_Thread_Mutex::tryacquire"); 00074 return ACE_OS::thread_mutex_trylock (&this->lock_); 00075 }
| int ACE_Thread_Mutex::tryacquire_read | ( | void | ) |
Conditionally acquire mutex (i.e., won't block). This calls tryacquire() and is only here to make the ACE_Thread_Mutex interface consistent with the other synchronization APIs. Returns -1 on failure. If we "failed" because someone else already had the lock, errno is set to EBUSY.
Definition at line 29 of file Thread_Mutex.inl.
00030 { 00031 // ACE_TRACE ("ACE_Thread_Mutex::tryacquire_read"); 00032 return ACE_OS::thread_mutex_trylock (&this->lock_); 00033 }
| int ACE_Thread_Mutex::tryacquire_write | ( | void | ) |
Conditionally acquire mutex (i.e., won't block). This calls tryacquire() and is only here to make the ACE_Thread_Mutex interface consistent with the other synchronization APIs. Returns -1 on failure. If we "failed" because someone else already had the lock, errno is set to EBUSY.
Definition at line 36 of file Thread_Mutex.inl.
00037 { 00038 // ACE_TRACE ("ACE_Thread_Mutex::tryacquire_write"); 00039 return ACE_OS::thread_mutex_trylock (&this->lock_); 00040 }
| int ACE_Thread_Mutex::tryacquire_write_upgrade | ( | void | ) |
This is only here to make the ACE_Thread_Mutex interface consistent with the other synchronization APIs. Assumes the caller has already acquired the mutex using one of the above calls, and returns 0 (success) always.
Definition at line 43 of file Thread_Mutex.inl.
friend class ACE_Condition_Thread_Mutex [friend] |
Definition at line 52 of file Thread_Mutex.h.
Declare the dynamic allocation hooks.
Definition at line 147 of file Thread_Mutex.h.
Mutex type that supports single-process locking efficiently.
Definition at line 151 of file Thread_Mutex.h.
Keeps track of whether remove() has been called yet to avoid multiple <remove> calls, e.g., explicitly and implicitly in the destructor. This flag isn't protected by a lock, so make sure that you don't have multiple threads simultaneously calling <remove> on the same object, which is a bad idea anyway...
Definition at line 158 of file Thread_Mutex.h.
1.6.1