/*
* Copyright (C) 2015 by Multi-Tech Systems
*
* This file is part of libmts.
*
* libmts is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* libmts is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with libmts. If not, see .
*
*/
/*! \file MTS_Lock.h
\brief A mutex lock
\date 15JUN11
\author Sean Godinez
A platform independent mutex lock.
*/
#ifndef _MTS_LOCK_H_
#define _MTS_LOCK_H_
#include
#include
#include
#ifdef WIN32
#include
#else
#include
#endif
namespace MTS {
//! A mutex lock
/*!
A platform independent mutex lock
\sa Condition
*/
class Lock: private NonCopyable {
public:
Lock(); //!< Constructs the Lock
~Lock(); //!< Destructs the Lock
void lock(); //!< Locks the mutex
void unlock(); //!< Unlocks the mutex
bool isLocked() const; //!< Returns true if locked
Condition* createCondition(); //!< Creates a Condition object associated with *this Lock
private:
friend class Condition;
volatile bool m_bLocked; //!< Locks the mutex
#ifdef WIN32
AutoPtr m_apMutex; //!< WIN32 Mutex Handle
#else
AutoPtr m_apMutex; //!< PTHREAD Mutex Handle
AutoPtr m_apMutexAttr; //!< PTHREAD Mutex Attributes
#endif
};
}
#endif