// Copyright 2020 the V8 project 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 V8_HEAP_PARKED_SCOPE_H_ #define V8_HEAP_PARKED_SCOPE_H_ #include <optional> #include "src/base/platform/condition-variable.h" #include "src/base/platform/mutex.h" #include "src/base/platform/semaphore.h" #include "src/execution/local-isolate.h" #include "src/heap/local-heap.h" namespace v8 { namespace internal { // Scope that explicitly parks a thread, prohibiting access to the heap and the // creation of handles. Do not use this directly! Use the family of // ExecuteWhileParked methods, instead. class V8_NODISCARD ParkedScope { … }; // Scope that explicitly unparks a thread, allowing access to the heap and the // creation of handles. class V8_NODISCARD UnparkedScope { … }; // Scope that explicitly unparks a background thread, allowing access to the // heap and the creation of handles. It has no effect on the main thread. class V8_NODISCARD UnparkedScopeIfOnBackground { … }; // Scope that automatically parks the thread while blocking on the given // base::Mutex. class V8_NODISCARD ParkedMutexGuard { … }; // Scope that automatically parks the thread while blocking on the given // base::RecursiveMutex. class V8_NODISCARD ParkedRecursiveMutexGuard { … }; template <base::MutexSharedType kIsShared, base::NullBehavior Behavior = base::NullBehavior::kRequireNotNull> class V8_NODISCARD ParkedSharedMutexGuardIf final { … }; // A subclass of base::ConditionVariable that automatically parks the thread // while waiting. class V8_NODISCARD ParkingConditionVariable final : public base::ConditionVariable { … }; // A subclass of base::Semaphore that automatically parks the thread while // waiting. class V8_NODISCARD ParkingSemaphore final : public base::Semaphore { … }; class ParkingThread : public v8::base::Thread { … }; } // namespace internal } // namespace v8 #endif // V8_HEAP_PARKED_SCOPE_H_