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