• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 The Android Open Source Project
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  *  Encapsulate a mutex for thread synchronization.
19  */
20 
21 #pragma once
22 #include <pthread.h>
23 
24 
25 class Mutex
26 {
27 public:
28     /*******************************************************************************
29     **
30     ** Function:        Mutex
31     **
32     ** Description:     Initialize member variables.
33     **
34     ** Returns:         None.
35     **
36     *******************************************************************************/
37     Mutex ();
38 
39 
40     /*******************************************************************************
41     **
42     ** Function:        ~Mutex
43     **
44     ** Description:     Cleanup all resources.
45     **
46     ** Returns:         None.
47     **
48     *******************************************************************************/
49     ~Mutex ();
50 
51 
52     /*******************************************************************************
53     **
54     ** Function:        lock
55     **
56     ** Description:     Block the thread and try lock the mutex.
57     **
58     ** Returns:         None.
59     **
60     *******************************************************************************/
61     void lock ();
62 
63 
64     /*******************************************************************************
65     **
66     ** Function:        unlock
67     **
68     ** Description:     Unlock a mutex to unblock a thread.
69     **
70     ** Returns:         None.
71     **
72     *******************************************************************************/
73     void unlock ();
74 
75 
76     /*******************************************************************************
77     **
78     ** Function:        tryLock
79     **
80     ** Description:     Try to lock the mutex.
81     **
82     ** Returns:         True if the mutex is locked.
83     **
84     *******************************************************************************/
85     bool tryLock ();
86 
87 
88     /*******************************************************************************
89     **
90     ** Function:        nativeHandle
91     **
92     ** Description:     Get the handle of the mutex.
93     **
94     ** Returns:         Handle of the mutex.
95     **
96     *******************************************************************************/
97     pthread_mutex_t* nativeHandle ();
98 
99     class Autolock {
100         public:
Autolock(Mutex & mutex)101             inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }
Autolock(Mutex * mutex)102             inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }
~Autolock()103             inline ~Autolock() { mLock.unlock(); }
104         private:
105             Mutex& mLock;
106     };
107 
108 
109 private:
110     pthread_mutex_t mMutex;
111 };
112 
113 typedef Mutex::Autolock AutoMutex;
114