Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
73
Src/Wasabi/bfc/critsec.cpp
Normal file
73
Src/Wasabi/bfc/critsec.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
#include "precomp_wasabi_bfc.h"
|
||||
#include "critsec.h"
|
||||
// uncomment this if needed
|
||||
//#define CS_DEBUG
|
||||
|
||||
CriticalSection::CriticalSection() {
|
||||
#ifdef WIN32
|
||||
InitializeCriticalSection(&cs);
|
||||
#elif defined(__APPLE__)
|
||||
MPCreateCriticalRegion(&cr);
|
||||
#elif defined(LINUX)
|
||||
pthread_mutex_t recursive = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
|
||||
cs.mutex = recursive;
|
||||
#endif
|
||||
|
||||
#ifdef ASSERTS_ENABLED
|
||||
#ifdef CS_DEBUG
|
||||
within = 0;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
CriticalSection::~CriticalSection() {
|
||||
#ifdef CS_DEBUG
|
||||
#ifdef ASSERTS_ENABLED
|
||||
ASSERT(!within);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
DeleteCriticalSection(&cs);
|
||||
#elif defined(__APPLE__)
|
||||
MPDeleteCriticalRegion(cr);
|
||||
#elif defined(LINUX)
|
||||
pthread_mutex_destroy(&cs.mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CriticalSection::enter() {
|
||||
#ifdef WIN32
|
||||
EnterCriticalSection(&cs);
|
||||
#elif defined(__APPLE__)
|
||||
MPEnterCriticalRegion(cr, kDurationForever);
|
||||
#elif defined(LINUX)
|
||||
pthread_mutex_lock(&cs.mutex);
|
||||
#endif
|
||||
|
||||
#ifdef CS_DEBUG
|
||||
#ifdef ASSERTS_ENABLED
|
||||
ASSERT(!within);
|
||||
within = 1;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void CriticalSection::leave() {
|
||||
#if defined(CS_DEBUG) && defined(ASSERTS_ENABLED)
|
||||
ASSERT(within);
|
||||
within = 0;
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
LeaveCriticalSection(&cs);
|
||||
#elif defined(__APPLE__)
|
||||
MPExitCriticalRegion(cr);
|
||||
#elif defined(LINUX)
|
||||
pthread_mutex_unlock(&cs.mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CriticalSection::inout() {
|
||||
enter();
|
||||
leave();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue