/*
* Mutex.cpp
* iphone-gl-app
*
* Created by John Ryland on 25/06/09.
* Copyright 2009 InvertedLogic. All rights reserved.
*
*/
#include <pthread.h>
#include "Mutex.h"
struct MutexPrivate
{
pthread_mutex_t mutex;
};
Mutex::MutexAutoLock::MutexAutoLock(Mutex *mutex) : autoLockMutex(mutex)
{
MutexPrivate *d = (MutexPrivate *)autoLockMutex->dptr;
pthread_mutex_lock(&d->mutex);
}
Mutex::MutexAutoLock::~MutexAutoLock()
{
MutexPrivate *d = (MutexPrivate *)autoLockMutex->dptr;
pthread_mutex_unlock(&d->mutex);
}
Mutex::Mutex()
{
pthread_mutex_t mutexInit = PTHREAD_MUTEX_INITIALIZER;
MutexPrivate *d = new MutexPrivate;
d->mutex = mutexInit;
pthread_mutex_init(&d->mutex, NULL);
dptr = (void *)d;
}
Mutex::~Mutex()
{
MutexPrivate *d = (MutexPrivate *)dptr;
pthread_mutex_destroy(&d->mutex);
delete d;
}
Mutex::MutexAutoLock Mutex::lock()
{
return Mutex::MutexAutoLock(this);
}