blob: 54aa2d3919140d2671130a7f4beb0921336e2d60 [file] [log] [blame]
//#####################################################################
// Copyright 2005, Andrew Selle.
// This file is part of PhysBAM whose distribution is governed by the license contained in the accompanying file PHYSBAM_COPYRIGHT.txt.
//#####################################################################
#ifndef __THREAD_LOCK__
#define __THREAD_LOCK__
#include <cstdio>
#include <cstdlib>
#include <cassert>
#ifdef ENABLE_PTHREADS
#if defined(ALAMERE_PTHREADS)
# include "alamere.h"
#else
# include <pthread.h>
#endif
#endif //ENABLE_PTHREADS
namespace PhysBAM
{
#ifdef ENABLE_PTHREADS
class THREAD_LOCK
{
private:
pthread_mutex_t mutex;
public:
THREAD_LOCK()
{
if (pthread_mutex_init (&mutex, 0) != 0)
{
Error();
}
}
~THREAD_LOCK()
{
if (pthread_mutex_destroy (&mutex) != 0)
{
Error();
}
}
void Lock()
{
if (pthread_mutex_lock (&mutex) != 0)
{
Error();
}
}
void Unlock()
{
if (pthread_mutex_unlock (&mutex) != 0)
{
Error();
}
}
void Error()
{
perror ("pthread");
assert (0);
}
friend class THREAD_CONDITION;
};
#else
class THREAD_LOCK
{
public:
THREAD_LOCK()
{}
~THREAD_LOCK()
{}
void Lock()
{}
void Unlock()
{}
void Error()
{
assert (0);
}
friend class THREAD_CONDITION;
};
#endif //ENABLE_PTHREADS
}
#endif