// Copyright 2011 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_SYNCHRONIZATION_LOCK_H_ #define BASE_SYNCHRONIZATION_LOCK_H_ #include "base/base_export.h" #include "base/dcheck_is_on.h" #include "base/synchronization/lock_impl.h" #include "base/synchronization/lock_subtle.h" #include "base/thread_annotations.h" #include "build/build_config.h" #if DCHECK_IS_ON() #include "base/threading/platform_thread_ref.h" #endif namespace base { // A convenient wrapper for an OS specific critical section. The only real // intelligence in this class is in debug mode for the support for the // AssertAcquired() method. class LOCKABLE BASE_EXPORT Lock { … }; // A helper class that acquires the given Lock while the AutoLock is in scope. AutoLock; // A helper class that acquires the given Lock while the MovableAutoLock is in // scope. Unlike AutoLock, the lock can be moved out of MovableAutoLock. Unlike // AutoLockMaybe, the passed in lock is always valid, so need to check only on // destruction. MovableAutoLock; // A helper class that tries to acquire the given Lock while the AutoTryLock is // in scope. AutoTryLock; // AutoUnlock is a helper that will Release() the |lock| argument in the // constructor, and re-Acquire() it in the destructor. AutoUnlock; // Like AutoLock but is a no-op when the provided Lock* is null. Inspired from // absl::MutexLockMaybe. Use this instead of std::optional<base::AutoLock> to // get around -Wthread-safety-analysis warnings for conditional locking. AutoLockMaybe; // Like AutoLock but permits Release() of its mutex before destruction. // Release() may be called at most once. Inspired from // absl::ReleasableMutexLock. Use this instead of std::optional<base::AutoLock> // to get around -Wthread-safety-analysis warnings for AutoLocks that are // explicitly released early (prefer proper scoping to this). ReleasableAutoLock; } // namespace base #endif // BASE_SYNCHRONIZATION_LOCK_H_