caudio/Source/cMutex.cpp
Joshua Jones 75ece68dcf Added cross-platform Mutex and Thread classes.
Made cAudio, cAudioCapture, cAudioManager and other classes thread safe.
Made cAudioManager use a seperate update thread by default.
Added cAudioSleep, a cross-platform sleep() function
Moved global defines to cAudioDefines
Added defines to disable thread safety or the internal update thread if the user wishes it
Updated tutorials to reflect the changes made
2009-08-29 11:24:31 +00:00

83 lines
1.4 KiB
C++

#include "../Headers/cMutex.h"
namespace cAudio
{
#ifdef CAUDIO_MAKE_THREAD_SAFE
cAudioMutex::cAudioMutex() : Initialized(false)
{
}
cAudioMutex::~cAudioMutex()
{
if(!Initialized)
return;
#ifdef _WIN32
DeleteCriticalSection(&criticalSection);
#else
pthread_mutex_destroy(&Mutex);
#endif
}
void cAudioMutex::lock(void)
{
if(!Initialized)
initialize();
#ifdef _WIN32
EnterCriticalSection(&criticalSection);
#else
int error = pthread_mutex_lock(&Mutex);
#endif
}
void cAudioMutex::unlock(void)
{
if(!Initialized)
return;
#ifdef _WIN32
LeaveCriticalSection(&criticalSection);
#else
int error = pthread_mutex_unlock(&Mutex);
#endif
}
void cAudioMutex::initialize(void)
{
#ifdef _WIN32
InitializeCriticalSection(&criticalSection);
#else
pthread_mutexattr_t attr;
int error = pthread_mutexattr_init(&attr);
error = pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
error = pthread_mutex_init(&Mutex, &attr);
error = pthread_mutexattr_destroy(&attr);
#endif
Initialized=true;
}
#else
cAudioMutex::cAudioMutex() : Initialized(false)
{
}
cAudioMutex::~cAudioMutex()
{
//Do nothing
}
void cAudioMutex::lock(void)
{
//Do nothing
}
void cAudioMutex::unlock(void)
{
//Do nothing
}
void cAudioMutex::initialize(void)
{
//Do nothing
}
#endif
};