#include <Semaphore.h>
Public Member Functions | |
| ACE_Semaphore (unsigned int count=1, int type=USYNC_THREAD, const ACE_TCHAR *name=0, void *=0, int max=0x7fffffff) | |
| Initialize the semaphore, with initial value of "count".   | |
| ~ACE_Semaphore (void) | |
| Implicitly destroy the semaphore.   | |
| int | remove (void) | 
| int | acquire (void) | 
| int | acquire (ACE_Time_Value &tv) | 
| int | acquire (ACE_Time_Value *tv) | 
| int | tryacquire (void) | 
| int | release (void) | 
| int | release (unsigned int release_count) | 
| int | acquire_read (void) | 
| int | acquire_write (void) | 
| int | tryacquire_read (void) | 
| int | tryacquire_write (void) | 
| int | tryacquire_write_upgrade (void) | 
| void | dump (void) const | 
| Dump the state of an object.   | |
| const ACE_sema_t & | lock (void) const | 
| Return the underlying lock.   | |
Public Attributes | |
| ACE_ALLOC_HOOK_DECLARE | |
| Declare the dynamic allocation hooks.   | |
Protected Attributes | |
| ACE_sema_t | semaphore_ | 
| bool | removed_ | 
Private Member Functions | |
| void | operator= (const ACE_Semaphore &) | 
| ACE_Semaphore (const ACE_Semaphore &) | |
Definition at line 36 of file Semaphore.h.
      
  | 
  ||||||||||||||||||||||||
| 
 Initialize the semaphore, with initial value of "count". 
 Definition at line 30 of file Semaphore.cpp. References ACE_ERROR, ACE_TCHAR, ACE_TEXT, ACE_UNIQUE_NAME_LEN, LM_ERROR, ACE_OS::sema_init(), and ACE::unique_name(). 
 00035 : removed_ (false) 00036 { 00037 // ACE_TRACE ("ACE_Semaphore::ACE_Semaphore"); 00038 #if defined(ACE_LACKS_UNNAMED_SEMAPHORE) 00039 // if the user does not provide a name, we generate a unique name here 00040 ACE_TCHAR iname[ACE_UNIQUE_NAME_LEN]; 00041 if (name == 0) 00042 ACE::unique_name (this, iname, ACE_UNIQUE_NAME_LEN); 00043 if (ACE_OS::sema_init (&this->semaphore_, count, type, 00044 name ? name : iname, 00045 arg, max) != 0) 00046 #else 00047 if (ACE_OS::sema_init (&this->semaphore_, count, type, 00048 name, arg, max) != 0) 00049 #endif 00050 ACE_ERROR ((LM_ERROR, 00051 ACE_TEXT ("%p\n"), 00052 ACE_TEXT ("ACE_Semaphore::ACE_Semaphore"))); 00053 }  | 
  
      
  | 
  
| 
 Implicitly destroy the semaphore. 
 Definition at line 55 of file Semaphore.cpp. References remove(). 
 00056 {
00057 // ACE_TRACE ("ACE_Semaphore::~ACE_Semaphore");
00058 
00059   this->remove ();
00060 }
 | 
  
      
  | 
  
| 
 
  | 
  
      
  | 
  
| 
 
If tv == 0 then call <acquire()> directly. Otherwise, Block the thread until the semaphore count becomes greater than 0 (at which point it is decremented) or until tv times out (in which case -1 is returned and  
 
 Definition at line 42 of file Semaphore.inl. References ACE_OS::sema_wait(). 
 00043 {
00044 // ACE_TRACE ("ACE_Semaphore::acquire");
00045   return ACE_OS::sema_wait (&this->semaphore_, tv);
00046 }
 | 
  
      
  | 
  
| 
 
Block the thread until the semaphore count becomes greater than 0 (at which point it is decremented) or until tv times out (in which case -1 is returned and  
 
 Definition at line 35 of file Semaphore.inl. References ACE_OS::sema_wait(). 
 00036 {
00037 // ACE_TRACE ("ACE_Semaphore::acquire");
00038   return ACE_OS::sema_wait (&this->semaphore_, tv);
00039 }
 | 
  
      
  | 
  
| 
 Block the thread until the semaphore count becomes greater than 0, then decrement it. Definition at line 28 of file Semaphore.inl. References ACE_OS::sema_wait(). Referenced by ACE_Process_Semaphore::acquire(), acquire_read(), acquire_write(), and ACE_Token::ACE_Token_Queue_Entry::wait(). 
 00029 {
00030 // ACE_TRACE ("ACE_Semaphore::acquire");
00031   return ACE_OS::sema_wait (&this->semaphore_);
00032 }
 | 
  
      
  | 
  
| 
 Acquire semaphore ownership. This calls and is only here to make the ACE_Semaphore interface consistent with the other synchronization APIs. Definition at line 74 of file Semaphore.inl. References acquire(). 
 00075 {
00076   return this->acquire ();
00077 }
 | 
  
      
  | 
  
| 
 Acquire semaphore ownership. This calls and is only here to make the ACE_Semaphore interface consistent with the other synchronization APIs. Definition at line 84 of file Semaphore.inl. References acquire(). 
 00085 {
00086   return this->acquire ();
00087 }
 | 
  
      
  | 
  
| 
 Dump the state of an object. 
 Definition at line 21 of file Semaphore.cpp. References ACE_BEGIN_DUMP, ACE_DEBUG, ACE_END_DUMP, ACE_TEXT, and LM_DEBUG. Referenced by ACE_Process_Semaphore::dump(). 
  | 
  
      
  | 
  
| 
 Return the underlying lock. 
 Definition at line 8 of file Semaphore.inl. References semaphore_. 
 00009 {
00010 // ACE_TRACE ("ACE_Semaphore::lock");
00011   return this->semaphore_;
00012 }
 | 
  
      
  | 
  
| 
 
  | 
  
      
  | 
  
| 
 Increment the semaphore by release_count, potentially unblocking waiting threads. Definition at line 63 of file Semaphore.inl. References ACE_OS::sema_post(). 
 00064 {
00065 // ACE_TRACE ("ACE_Semaphore::release");
00066   return ACE_OS::sema_post (&this->semaphore_, release_count);
00067 }
 | 
  
      
  | 
  
| 
 Increment the semaphore by 1, potentially unblocking a waiting thread. Definition at line 56 of file Semaphore.inl. References ACE_OS::sema_post(). Referenced by ACE_Process_Semaphore::release(), and ACE_Token::ACE_Token_Queue_Entry::signal(). 
 00057 {
00058 // ACE_TRACE ("ACE_Semaphore::release");
00059   return ACE_OS::sema_post (&this->semaphore_);
00060 }
 | 
  
      
  | 
  
| 
 Explicitly destroy the semaphore. Note that only one thread should call this method since it doesn't protect against race conditions. Definition at line 15 of file Semaphore.inl. References ACE_OS::sema_destroy(). Referenced by ACE_Process_Semaphore::remove(), and ~ACE_Semaphore(). 
 00016 {
00017 // ACE_TRACE ("ACE_Semaphore::remove");
00018   int result = 0;
00019   if (!this->removed_)
00020     {
00021       this->removed_ = true;
00022       result = ACE_OS::sema_destroy (&this->semaphore_);
00023     }
00024   return result;
00025 }
 | 
  
      
  | 
  
| 
 
Conditionally decrement the semaphore if count is greater than 0 (i.e., won't block). Returns -1 on failure. If we "failed" because someone else already had the lock,  Definition at line 49 of file Semaphore.inl. References ACE_OS::sema_trywait(). Referenced by ACE_Process_Semaphore::tryacquire(), tryacquire_read(), and tryacquire_write(). 
 00050 {
00051 // ACE_TRACE ("ACE_Semaphore::tryacquire");
00052   return ACE_OS::sema_trywait (&this->semaphore_);
00053 }
 | 
  
      
  | 
  
| 
 
Conditionally acquire semaphore (i.e., won't block). This calls  and is only here to make the ACE_Semaphore interface consistent with the other synchronization APIs. Returns -1 on failure. If we "failed" because someone else already had the lock,  Definition at line 94 of file Semaphore.inl. References tryacquire(). 
 00095 {
00096   return this->tryacquire ();
00097 }
 | 
  
      
  | 
  
| 
 
Conditionally acquire semaphore (i.e., won't block). This calls  and is only here to make the ACE_Semaphore interface consistent with the other synchronization APIs. Returns -1 on failure. If we "failed" because someone else already had the lock,  Definition at line 104 of file Semaphore.inl. References tryacquire(). 
 00105 {
00106   return this->tryacquire ();
00107 }
 | 
  
      
  | 
  
| 
 This is only here to make the ACE_Semaphore interface consistent with the other synchronization APIs. Assumes the caller has already acquired the semaphore using one of the above calls, and returns 0 (success) always. Definition at line 114 of file Semaphore.inl. 
 00115 {
00116   return 0;
00117 }
 | 
  
      
  | 
  
| 
 Declare the dynamic allocation hooks. 
 Definition at line 155 of file Semaphore.h.  | 
  
      
  | 
  
| 
 Keeps track of whether has been called yet to avoid multiple 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 on the same object, which is a bad idea anyway... Definition at line 168 of file Semaphore.h.  | 
  
      
  | 
  
| 
 
 Definition at line 161 of file Semaphore.h. Referenced by lock().  | 
  
 
1.3.6