1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Copyright (C) 2012 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Encapsulate a mutex for thread synchronization.
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#pragma once
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <pthread.h>
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectclass Mutex
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectpublic:
32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /*******************************************************************************
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Function:        Mutex
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Description:     Initialize member variables.
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Returns:         None.
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    *******************************************************************************/
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    Mutex ();
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /*******************************************************************************
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Function:        ~Mutex
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Description:     Cleanup all resources.
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Returns:         None.
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    *******************************************************************************/
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ~Mutex ();
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /*******************************************************************************
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Function:        lock
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Description:     Block the thread and try lock the mutex.
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Returns:         None.
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    *******************************************************************************/
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    void lock ();
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /*******************************************************************************
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Function:        unlock
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Description:     Unlock a mutex to unblock a thread.
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Returns:         None.
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    *******************************************************************************/
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    void unlock ();
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /*******************************************************************************
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Function:        tryLock
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Description:     Try to lock the mutex.
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Returns:         True if the mutex is locked.
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    *******************************************************************************/
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    bool tryLock ();
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    /*******************************************************************************
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Function:        nativeHandle
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Description:     Get the handle of the mutex.
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    ** Returns:         Handle of the mutex.
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    **
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    *******************************************************************************/
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    pthread_mutex_t* nativeHandle ();
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectprivate:
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project    pthread_mutex_t mMutex;
105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
107