// Copyright (c) 2004 David Muse
// See the COPYING file for more information.
#ifndef RUDIMENTS_MUTEX_H
#define RUDIMENTS_MUTEX_H
#include <rudiments/private/mutexincludes.h>
// The mutex class provides an interface to pthreads mutual exclusion locks.
#ifdef RUDIMENTS_NAMESPACE
namespace rudiments {
#endif
class mutexprivate;
class mutex {
public:
mutex();
// Initialize a mutex.
#if defined(RUDIMENTS_HAVE_PTHREAD_MUTEX_T)
mutex(pthread_mutex_t *mut);
#elif defined(RUDIMENTS_HAVE_CREATE_MUTEX)
mutex(HANDLE mut);
#endif
// Attach already initialized "mut" to this instance.
~mutex();
// Destroy the mutex.
bool lock();
// Lock the mutex. Will wait until the lock succeds.
// Returns true on success and false if an error occurs.
bool tryLock();
// Try to lock the mutex. Will return immediately
// if the mutex could not be locked, returning false
// and setting errno to EBUSY.
// Returns true on success and false if an error occurs.
bool unlock();
// Unlock the mutex.
// Returns true on success and false if an error occurs.
#if defined(RUDIMENTS_HAVE_PTHREAD_MUTEX_T)
pthread_mutex_t *getMutex();
#elif defined(RUDIMENTS_HAVE_CREATE_MUTEX)
HANDLE getMutex();
#endif
// Returns the mutex used by
// the class internally.
#include <rudiments/private/mutex.h>
};
#ifdef RUDIMENTS_NAMESPACE
}
#endif
#endif