1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
//===- Mutex.inc ----------------------------------------------------------===//
//
// The SkyPat team
//
// This file is distributed under the New BSD License.
// See LICENSE for details.
//
//===----------------------------------------------------------------------===//
#include <pthread.h>
#include <errno.h>
#include <skypat/Thread/MutexImpl.h>
#include <iostream>
//===----------------------------------------------------------------------===//
// Mutex
//===----------------------------------------------------------------------===//
Mutex::Mutex()
: m_pData(new MutexData()) {
int code = pthread_mutex_init(&m_pData->mutex, NULL);
if (0 != code)
std::cerr<< code;
}
Mutex::~Mutex()
{
int code = pthread_mutex_destroy(&m_pData->mutex);
if (0 != code)
std::cerr<< code;
delete m_pData;
}
void Mutex::lock() throw()
{
int code = pthread_mutex_lock(&m_pData->mutex);
if (0 != code)
std::cerr<< code;
}
void Mutex::unlock() throw()
{
int code = pthread_mutex_unlock(&m_pData->mutex);
if (0 != code)
std::cerr<< code;
}
Mutex::Status Mutex::tryLock()
{
switch(pthread_mutex_trylock(&m_pData->mutex)) {
case 0:
return Success;
case EBUSY:
return Busy;
case EINVAL:
return Invalid;
}
return UnknownError;
}
|