1525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* 2525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Copyright (C) 2012 The Android Open Source Project 3525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 4525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * you may not use this file except in compliance with the License. 6525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * You may obtain a copy of the License at 7525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 8525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * 10525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * See the License for the specific language governing permissions and 14525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * limitations under the License. 15525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 16525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 17525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/* 18525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project * Synchronize two or more threads using a condition variable and a mutex. 19525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project */ 20525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#pragma once 21525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "CondVar.h" 22525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project#include "Mutex.h" 23525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 24525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 25525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectclass SyncEvent 26525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 27525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectpublic: 28525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 29525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 30525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: ~SyncEvent 31525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 32525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: Cleanup all resources. 33525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 34525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 35525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 36525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 37525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ~SyncEvent () 38525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 39525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 40525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 41525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 42525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 43525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 44525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: start 45525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 46525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: Start a synchronization operation. 47525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 48525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 49525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 50525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 51525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void start () 52525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 53525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project mMutex.lock (); 54525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 55525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 56525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 57525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 58525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 59525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: wait 60525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 61525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: Block the thread and wait for the event to occur. 62525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 63525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 64525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 65525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 66525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void wait () 67525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 68525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project mCondVar.wait (mMutex); 69525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 70525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 71525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 72525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 73525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 74525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: wait 75525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 76525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: Block the thread and wait for the event to occur. 77525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** millisec: Timeout in milliseconds. 78525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 79525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: True if wait is successful; false if timeout occurs. 80525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 81525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 82525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool wait (long millisec) 83525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 84525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project bool retVal = mCondVar.wait (mMutex, millisec); 85525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project return retVal; 86525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 87525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 88525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 89525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 90525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 91525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: notifyOne 92525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 93525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: Notify a blocked thread that the event has occured. Unblocks it. 94525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 95525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 96525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 97525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 98525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void notifyOne () 99525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 100525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project mCondVar.notifyOne (); 101525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 102525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 103525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 104525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 105525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 106525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: end 107525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 108525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: End a synchronization operation. 109525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 110525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 111525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 112525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 113525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project void end () 114525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 115525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project mMutex.unlock (); 116525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project } 117525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 118525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectprivate: 119525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project CondVar mCondVar; 120525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project Mutex mMutex; 121525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}; 122525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 123525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 124525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/*****************************************************************************/ 125525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/*****************************************************************************/ 126525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 127525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 128525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project/***************************************************************************** 129525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 130525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Name: SyncEventGuard 131525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 132525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** Description: Automatically start and end a synchronization event. 133525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project** 134525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project*****************************************************************************/ 135525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectclass SyncEventGuard 136525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project{ 137525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectpublic: 138525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 139525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 140525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: SyncEventGuard 141525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 142525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: Start a synchronization operation. 143525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 144525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 145525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 146525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 147525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEventGuard (SyncEvent& event) 148525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project : mEvent (event) 149525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 150525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project event.start (); //automatically start operation 151525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project }; 152525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 153525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 154525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project /******************************************************************************* 155525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 156525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Function: ~SyncEventGuard 157525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 158525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Description: End a synchronization operation. 159525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 160525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** Returns: None. 161525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ** 162525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project *******************************************************************************/ 163525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project ~SyncEventGuard () 164525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project { 165525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project mEvent.end (); //automatically end operation 166525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project }; 167525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 168525c260303268a83da4c3413b953d13c9084e834The Android Open Source Projectprivate: 169525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project SyncEvent& mEvent; 170525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project}; 171525c260303268a83da4c3413b953d13c9084e834The Android Open Source Project 172