blob: 5e0dcf77b489b4c68538b7f0cfc5eff7cdd77892 [file] [log] [blame]
Steve Pomeroybb7f9282024-03-06 16:15:35 +00001/*
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 condition variable for thread synchronization.
19 */
20
21#pragma once
22#include <pthread.h>
23
24#include <mutex>
25
26class CondVar {
27 public:
28 /*******************************************************************************
29 **
30 ** Function: CondVar
31 **
32 ** Description: Initialize member variables.
33 **
34 ** Returns: None.
35 **
36 *******************************************************************************/
37 CondVar();
38
39 /*******************************************************************************
40 **
41 ** Function: ~CondVar
42 **
43 ** Description: Cleanup all resources.
44 **
45 ** Returns: None.
46 **
47 *******************************************************************************/
48 ~CondVar();
49
50 /*******************************************************************************
51 **
52 ** Function: wait
53 **
54 ** Description: Block the caller and wait for a condition.
55 **
56 ** Returns: None.
57 **
58 *******************************************************************************/
59 void wait(std::mutex& mutex);
60
61 /*******************************************************************************
62 **
63 ** Function: wait
64 **
65 ** Description: Block the caller and wait for a condition.
66 ** millisec: Timeout in milliseconds.
67 **
68 ** Returns: True if wait is successful; false if timeout occurs.
69 **
70 *******************************************************************************/
71 bool wait(std::mutex& mutex, long millisec);
72
73 /*******************************************************************************
74 **
75 ** Function: notifyOne
76 **
77 ** Description: Unblock the waiting thread.
78 **
79 ** Returns: None.
80 **
81 *******************************************************************************/
82 void notifyOne();
83
84 private:
85 pthread_cond_t mCondition;
86};