/*
* Copyright@ Samsung Electronics Co. LTD
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*!
* \file ExynosMutex.h
* \brief header file for ExynosMutex
* \author Sangwoo, Park(sw5771.park@samsung.com)
* \date 2011/06/15
*
* <b>Revision History: </b>
* - 2010/06/15 : Sangwoo, Park(sw5771.park@samsung.com) \n
* Initial version
*
*/
#ifndef __EXYNOS_MUTEX_H__
#define __EXYNOS_MUTEX_H__
#ifdef __cplusplus
//! ExynosMutex
/*!
* \ingroup Exynos
*/
class ExynosMutex
{
public:
enum TYPE {
TYPE_BASE = 0,
TYPE_PRIVATE, //!< within this process
TYPE_SHARED, //!< within whole system
TYPE_MAX,
};
public:
//! Constructor.
ExynosMutex();
//! Destructor
virtual ~ExynosMutex();
//! Create Mutex
bool create(int type, char* name);
//! Destroy Mutex
void destroy(void);
//! Get Mutex created status
bool getCreatedStatus(void);
//! Lock Mutex
bool lock(void);
//! Unlock Mutex
bool unLock(void);
//! trylock Mutex
bool tryLock(void);
//! Get Mutex type
int getType(void);
private:
void *m_mutex;
bool m_flagCreate;
int m_type;
char m_name[128];
public:
//! Autolock
/*!
* \ingroup ExynosMutex
*/
class Autolock {
public:
//! Lock on constructor
inline Autolock(ExynosMutex& mutex) : mLock(mutex) { mLock.lock(); }
//! Lock on constructor
inline Autolock(ExynosMutex* mutex) : mLock(*mutex) { mLock.lock(); }
//! Unlock on destructor
inline ~Autolock() { mLock.unLock(); }
private:
ExynosMutex& mLock;
};
};
extern "C" {
#endif
enum EXYNOS_MUTEX_TYPE {
EXYNOS_MUTEX_TYPE_BASE = 0,
EXYNOS_MUTEX_TYPE_PRIVATE, //!< within this process
EXYNOS_MUTEX_TYPE_SHARED, //!< within whole system
EXYNOS_MUTEX_TYPE_MAX,
};
void *exynos_mutex_create(
int type,
char *name);
bool exynos_mutex_destroy(
void *handle);
bool exynos_mutex_lock(
void *handle);
bool exynos_mutex_unlock(
void *handle);
bool exynos_mutex_trylock(
void *handle);
int exynos_mutex_type(
void *handle);
bool exynos_mutex_get_created_status(
void *handle);
#ifdef __cplusplus
}
#endif
#endif //__EXYNOS_MUTEX_H__