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