• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef V8_EXECUTION_THREAD_ID_H_
6 #define V8_EXECUTION_THREAD_ID_H_
7 
8 #include "src/base/macros.h"
9 
10 namespace v8 {
11 namespace internal {
12 
13 // Platform-independent, reliable thread identifier.
14 class ThreadId {
15  public:
16   // Creates an invalid ThreadId.
ThreadId()17   constexpr ThreadId() noexcept : ThreadId(kInvalidId) {}
18 
19   bool operator==(const ThreadId& other) const { return id_ == other.id_; }
20   bool operator!=(const ThreadId& other) const { return id_ != other.id_; }
21 
22   // Checks whether this ThreadId refers to any thread.
IsValid()23   bool IsValid() const { return id_ != kInvalidId; }
24 
25   // Converts ThreadId to an integer representation.
ToInteger()26   constexpr int ToInteger() const { return id_; }
27 
28   // Returns ThreadId for current thread if it exists or invalid id.
29   static ThreadId TryGetCurrent();
30 
31   // Returns ThreadId for current thread.
Current()32   static ThreadId Current() { return ThreadId(GetCurrentThreadId()); }
33 
34   // Returns invalid ThreadId (guaranteed not to be equal to any thread).
Invalid()35   static constexpr ThreadId Invalid() { return ThreadId(kInvalidId); }
36 
37   // Converts ThreadId to an integer representation
38   // (required for public API: V8::V8::TerminateExecution).
FromInteger(int id)39   static constexpr ThreadId FromInteger(int id) { return ThreadId(id); }
40 
41  private:
42   static constexpr int kInvalidId = -1;
43 
ThreadId(int id)44   explicit constexpr ThreadId(int id) noexcept : id_(id) {}
45 
46   V8_EXPORT_PRIVATE static int GetCurrentThreadId();
47 
48   int id_;
49 };
50 
51 }  // namespace internal
52 }  // namespace v8
53 
54 #endif  // V8_EXECUTION_THREAD_ID_H_
55