#ifndef __SYNC_H__
#define __SYNC_H__
#if defined(_WIN32)
class dbMutex {
CRITICAL_SECTION cs;
public:
dbMutex() { InitializeCriticalSection(&cs); }
~dbMutex() { DeleteCriticalSection(&cs); }
void lock() { EnterCriticalSection(&cs); }
void unlock() { LeaveCriticalSection(&cs); }
};
#else
#ifndef NO_PTHREADS
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>
class dbMutex {
friend class dbEvent;
friend class dbSemaphore;
pthread_mutex_t cs;
public:
dbMutex() { pthread_mutex_init(&cs, NULL); }
~dbMutex() { pthread_mutex_destroy(&cs); }
void lock() { pthread_mutex_lock(&cs); }
void unlock() { pthread_mutex_unlock(&cs); }
};
#else
class dbMutex {
public:
void lock() {}
void unlock() {}
};
#endif
#endif
class dbCriticalSection {
private:
dbMutex &mutex;
dbCriticalSection(const dbCriticalSection &);
dbCriticalSection &operator=(const dbCriticalSection &);
public:
dbCriticalSection(dbMutex &guard) : mutex(guard) { mutex.lock(); }
~dbCriticalSection() { mutex.unlock(); }
};
#endif