1/**
2 * Copyright 2021 Alibaba, Inc. and its affiliates. All Rights Reserved.
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 * \author Haichao.chc
17 * \date Oct 2020
18 * \brief Implementation of wait notifier
19 */
20
21#include "wait_notifier.h"
22
23namespace proxima {
24namespace be {
25
26void WaitNotifier::wait() {
27 std::unique_lock<std::mutex> lck(mutex_);
28 if (!notified_) {
29 cv_.wait(lck);
30 }
31 notified_ = false;
32}
33
34void WaitNotifier::wait_until(
35 const std::chrono::system_clock::time_point &tm_point) {
36 std::unique_lock<std::mutex> lck(mutex_);
37 if (!notified_) {
38 cv_.wait_until(lck, tm_point);
39 }
40 notified_ = false;
41}
42
43void WaitNotifier::wait_for(
44 const std::chrono::system_clock::duration &tm_duration) {
45 std::unique_lock<std::mutex> lck(mutex_);
46 if (!notified_) {
47 cv_.wait_for(lck, tm_duration);
48 }
49 notified_ = false;
50}
51
52void WaitNotifier::notify() {
53 std::unique_lock<std::mutex> lck(mutex_);
54 notified_ = true;
55 lck.unlock();
56 cv_.notify_one();
57}
58
59} // namespace be
60} // end namespace proxima
61