blob: 80ee0185c5ee08edc00321b4a424057f4e2b5c48 [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_CONDITION__
#define __THREAD_CONDITION__
#include <cstdio>
#include <cstdlib>
#include <cassert>
#include "THREAD_LOCK.h"
#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_CONDITION
{
private:
pthread_cond_t cond;
public:
THREAD_CONDITION()
{
pthread_cond_init (&cond, 0);
}
~THREAD_CONDITION()
{
pthread_cond_destroy (&cond);
}
void Wait (THREAD_LOCK& lock)
{
pthread_cond_wait (&cond, &lock.mutex);
}
void Signal()
{
pthread_cond_signal (&cond);
}
void Broadcast()
{
pthread_cond_broadcast (&cond);
}
};
#else
class THREAD_CONDITION
{
public:
THREAD_CONDITION()
{}
~THREAD_CONDITION()
{}
void Wait (THREAD_LOCK& lock)
{}
void Signal()
{}
void Broadcast()
{}
};
#endif //ENABLE_PTHREADS
}
#endif