2010-02-09 05:18:39 +01:00
|
|
|
// Copyright (c) 2008-2010 Raynaldo (Wildicv) Rivera, Joshua (Dark_Kilauea) Jones
|
|
|
|
// This file is part of the "cAudio Engine"
|
|
|
|
// For conditions of distribution and use, see copyright notice in cAudio.h
|
|
|
|
|
2009-08-29 13:24:31 +02:00
|
|
|
#include "../Headers/cMutex.h"
|
|
|
|
|
|
|
|
namespace cAudio
|
|
|
|
{
|
|
|
|
#ifdef CAUDIO_MAKE_THREAD_SAFE
|
|
|
|
cAudioMutex::cAudioMutex() : Initialized(false)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
cAudioMutex::~cAudioMutex()
|
|
|
|
{
|
|
|
|
if(!Initialized)
|
|
|
|
return;
|
2010-02-09 06:58:27 +01:00
|
|
|
#ifdef CAUDIO_PLATFORM_WIN
|
2009-08-29 13:24:31 +02:00
|
|
|
DeleteCriticalSection(&criticalSection);
|
|
|
|
#else
|
|
|
|
pthread_mutex_destroy(&Mutex);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void cAudioMutex::lock(void)
|
|
|
|
{
|
|
|
|
if(!Initialized)
|
|
|
|
initialize();
|
|
|
|
|
2010-02-09 06:58:27 +01:00
|
|
|
#ifdef CAUDIO_PLATFORM_WIN
|
2009-08-29 13:24:31 +02:00
|
|
|
EnterCriticalSection(&criticalSection);
|
|
|
|
#else
|
|
|
|
int error = pthread_mutex_lock(&Mutex);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void cAudioMutex::unlock(void)
|
|
|
|
{
|
|
|
|
if(!Initialized)
|
|
|
|
return;
|
2010-02-09 06:58:27 +01:00
|
|
|
#ifdef CAUDIO_PLATFORM_WIN
|
2009-08-29 13:24:31 +02:00
|
|
|
LeaveCriticalSection(&criticalSection);
|
|
|
|
#else
|
|
|
|
int error = pthread_mutex_unlock(&Mutex);
|
|
|
|
#endif
|
|
|
|
}
|
|
|
|
|
|
|
|
void cAudioMutex::initialize(void)
|
|
|
|
{
|
2010-02-09 06:58:27 +01:00
|
|
|
#ifdef CAUDIO_PLATFORM_WIN
|
2009-08-29 13:24:31 +02:00
|
|
|
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
|
|
|
|
|
|
|
|
};
|