| 
							- /***************************************************/
 - /*! \class Mutex
 -     \brief STK mutex class.
 - 
 -     This class provides a uniform interface for
 -     cross-platform mutex use.  On Linux and IRIX
 -     systems, the pthread library is used. Under
 -     Windows, critical sections are used.
 - 
 -     by Perry R. Cook and Gary P. Scavone, 1995--2017.
 - */
 - /***************************************************/
 - 
 - #include "Mutex.h"
 - 
 - namespace stk {
 - 
 - Mutex :: Mutex()
 - {
 - 
 - #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
 - 
 -   pthread_mutex_init(&mutex_, NULL);
 -   pthread_cond_init(&condition_, NULL);
 - 
 - #elif defined(__OS_WINDOWS__)
 - 
 -   InitializeCriticalSection(&mutex_);
 -   condition_ = CreateEvent(NULL,  // no security
 -                            true,  // manual-reset
 -                            false, // non-signaled initially
 -                            NULL); // unnamed
 - 
 - #endif 
 - }
 - 
 - Mutex :: ~Mutex()
 - {
 - #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
 - 
 -   pthread_mutex_destroy(&mutex_);
 -   pthread_cond_destroy(&condition_);
 - 
 - #elif defined(__OS_WINDOWS__)
 - 
 -   DeleteCriticalSection(&mutex_);
 -   CloseHandle( condition_ );
 - 
 - #endif 
 - }
 - 
 - void Mutex :: lock()
 - {
 - #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
 - 
 -   pthread_mutex_lock(&mutex_);
 - 
 - #elif defined(__OS_WINDOWS__)
 - 
 -   EnterCriticalSection(&mutex_);
 - 
 - #endif 
 - }
 - 
 - void Mutex :: unlock()
 - {
 - #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
 - 
 -   pthread_mutex_unlock(&mutex_);
 - 
 - #elif defined(__OS_WINDOWS__)
 - 
 -   LeaveCriticalSection(&mutex_);
 - 
 - #endif 
 - }
 - 
 - void Mutex :: wait()
 - {
 - #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
 - 
 -   pthread_cond_wait(&condition_, &mutex_);
 - 
 - #elif defined(__OS_WINDOWS__)
 - 
 -   WaitForMultipleObjects(1, &condition_, false, INFINITE);
 - 
 - #endif 
 - }
 - 
 - void Mutex :: signal()
 - {
 - #if (defined(__OS_IRIX__) || defined(__OS_LINUX__) || defined(__OS_MACOSX__))
 - 
 -   pthread_cond_signal(&condition_);
 - 
 - #elif defined(__OS_WINDOWS__)
 - 
 -   SetEvent( condition_ );
 - 
 - #endif 
 - }
 - 
 - } // stk namespace
 
 
  |