blob: 62cb91d302cccc92077bda9e5ead94717bc13e4f [file] [log] [blame]
Aaron Klingb2b3dd02015-11-12 09:25:04 -06001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18#ifndef POWER_HAL_BARRIER_H
19#define POWER_HAL_BARRIER_H
20
21#include <stdint.h>
22#include <sys/types.h>
23#include <utils/threads.h>
24
25typedef android::Mutex Mutex;
26typedef android::Condition Condition;
27
28class Barrier
29{
30public:
31 inline Barrier() : state(CLOSED) { }
32 inline ~Barrier() { }
33 void open() {
34 Mutex::Autolock _l(lock);
35 state = OPENED;
36 cv.broadcast();
37 }
38 void close() {
39 Mutex::Autolock _l(lock);
40 state = CLOSED;
41 }
42 void wait() const {
43 Mutex::Autolock _l(lock);
44 while (state == CLOSED) {
45 cv.wait(lock);
46 }
47 }
48private:
49 enum { OPENED, CLOSED };
50 mutable Mutex lock;
51 mutable Condition cv;
52 volatile int state;
53};
54
55#endif // POWER_HAL_BARRIER_H