// Copyright 2016 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 BASE_TASK_SCHEDULER_SCHEDULER_LOCK_IMPL_H #define BASE_TASK_SCHEDULER_SCHEDULER_LOCK_IMPL_H #include #include "base/base_export.h" #include "base/macros.h" #include "base/synchronization/lock.h" namespace base { class ConditionVariable; namespace internal { // A regular lock with simple deadlock correctness checking. // This lock tracks all of the available locks to make sure that any locks are // acquired in an expected order. // See scheduler_lock.h for details. class BASE_EXPORT SchedulerLockImpl { public: SchedulerLockImpl(); explicit SchedulerLockImpl(const SchedulerLockImpl* predecessor); ~SchedulerLockImpl(); void Acquire(); void Release(); void AssertAcquired() const; std::unique_ptr CreateConditionVariable(); private: Lock lock_; DISALLOW_COPY_AND_ASSIGN(SchedulerLockImpl); }; } // namespace internal } // namespace base #endif // BASE_TASK_SCHEDULER_SCHEDULER_LOCK_IMPL_H