mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
76 lines
1.3 KiB
C++
76 lines
1.3 KiB
C++
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef SKY_ENGINE_CORE_SCRIPT_MONITOR_H_
|
|
#define SKY_ENGINE_CORE_SCRIPT_MONITOR_H_
|
|
|
|
#include "base/synchronization/condition_variable.h"
|
|
#include "base/synchronization/lock.h"
|
|
|
|
namespace blink {
|
|
|
|
class Monitor {
|
|
public:
|
|
Monitor() {
|
|
lock_ = new base::Lock();
|
|
condition_variable_ = new base::ConditionVariable(lock_);
|
|
}
|
|
|
|
~Monitor() {
|
|
delete condition_variable_;
|
|
delete lock_;
|
|
}
|
|
|
|
void Enter() {
|
|
lock_->Acquire();
|
|
}
|
|
|
|
void Exit() {
|
|
lock_->Release();
|
|
}
|
|
|
|
void Notify() {
|
|
condition_variable_->Signal();
|
|
}
|
|
|
|
void Wait() {
|
|
condition_variable_->Wait();
|
|
}
|
|
|
|
private:
|
|
base::Lock* lock_;
|
|
base::ConditionVariable* condition_variable_;
|
|
DISALLOW_COPY_AND_ASSIGN(Monitor);
|
|
};
|
|
|
|
class MonitorLocker {
|
|
public:
|
|
explicit MonitorLocker(Monitor* monitor) : monitor_(monitor) {
|
|
CHECK(monitor_);
|
|
monitor_->Enter();
|
|
}
|
|
|
|
virtual ~MonitorLocker() {
|
|
monitor_->Exit();
|
|
}
|
|
|
|
void Wait() {
|
|
return monitor_->Wait();
|
|
}
|
|
|
|
void Notify() {
|
|
monitor_->Notify();
|
|
}
|
|
|
|
private:
|
|
Monitor* const monitor_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(MonitorLocker);
|
|
};
|
|
|
|
} // namespace blink
|
|
|
|
|
|
#endif // SKY_ENGINE_CORE_SCRIPT_MONITOR_H_
|