C++程序  |  140行  |  2.75 KB

/*
 * 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__