Version 4.2.0

This commit is contained in:
Gary Scavone
2009-03-24 23:02:14 -04:00
committed by Stephen Sinclair
parent cf06b7598b
commit a6381b9d38
281 changed files with 17152 additions and 12000 deletions

100
src/Mutex.cpp Normal file
View File

@@ -0,0 +1,100 @@
/***************************************************/
/*! \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 - 2004.
*/
/***************************************************/
#include "Mutex.h"
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
}