1/* 2 * Copyright@ Samsung Electronics Co. LTD 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15*/ 16 17/*! 18 * \file ExynosMutex.h 19 * \brief header file for ExynosMutex 20 * \author Sangwoo, Park(sw5771.park@samsung.com) 21 * \date 2011/06/15 22 * 23 * <b>Revision History: </b> 24 * - 2010/06/15 : Sangwoo, Park(sw5771.park@samsung.com) \n 25 * Initial version 26 * 27 */ 28 29#ifndef __EXYNOS_MUTEX_H__ 30#define __EXYNOS_MUTEX_H__ 31 32#ifdef __cplusplus 33 34//! ExynosMutex 35/*! 36 * \ingroup Exynos 37 */ 38class ExynosMutex 39{ 40public: 41 enum TYPE { 42 TYPE_BASE = 0, 43 TYPE_PRIVATE, //!< within this process 44 TYPE_SHARED, //!< within whole system 45 TYPE_MAX, 46 }; 47 48public: 49 //! Constructor. 50 ExynosMutex(); 51 52 //! Destructor 53 virtual ~ExynosMutex(); 54 55 //! Create Mutex 56 bool create(int type, char* name); 57 58 //! Destroy Mutex 59 void destroy(void); 60 61 //! Get Mutex created status 62 bool getCreatedStatus(void); 63 64 //! Lock Mutex 65 bool lock(void); 66 67 //! Unlock Mutex 68 bool unLock(void); 69 70 //! trylock Mutex 71 bool tryLock(void); 72 73 //! Get Mutex type 74 int getType(void); 75 76private: 77 void *m_mutex; 78 bool m_flagCreate; 79 80 int m_type; 81 char m_name[128]; 82 83public: 84 //! Autolock 85 /*! 86 * \ingroup ExynosMutex 87 */ 88 class Autolock { 89 public: 90 //! Lock on constructor 91 inline Autolock(ExynosMutex& mutex) : mLock(mutex) { mLock.lock(); } 92 93 //! Lock on constructor 94 inline Autolock(ExynosMutex* mutex) : mLock(*mutex) { mLock.lock(); } 95 96 //! Unlock on destructor 97 inline ~Autolock() { mLock.unLock(); } 98 private: 99 ExynosMutex& mLock; 100 }; 101}; 102 103extern "C" { 104#endif 105 106enum EXYNOS_MUTEX_TYPE { 107 EXYNOS_MUTEX_TYPE_BASE = 0, 108 EXYNOS_MUTEX_TYPE_PRIVATE, //!< within this process 109 EXYNOS_MUTEX_TYPE_SHARED, //!< within whole system 110 EXYNOS_MUTEX_TYPE_MAX, 111}; 112 113void *exynos_mutex_create( 114 int type, 115 char *name); 116 117bool exynos_mutex_destroy( 118 void *handle); 119 120bool exynos_mutex_lock( 121 void *handle); 122 123bool exynos_mutex_unlock( 124 void *handle); 125 126bool exynos_mutex_trylock( 127 void *handle); 128 129int exynos_mutex_type( 130 void *handle); 131 132bool exynos_mutex_get_created_status( 133 void *handle); 134 135#ifdef __cplusplus 136} 137#endif 138 139#endif //__EXYNOS_MUTEX_H__ 140