Go to the documentation of this file.
20 #ifndef ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_
21 #define ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_
33 #include "absl/base/config.h"
34 #include "absl/base/internal/per_thread_tls.h"
35 #include "absl/base/optimization.h"
40 struct SynchLocksHeld;
41 struct SynchWaitParams;
43 namespace base_internal {
46 struct ThreadIdentity;
190 #ifdef ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC
191 #error ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC cannot be directly set
193 #define ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC 0
196 #ifdef ABSL_THREAD_IDENTITY_MODE_USE_TLS
197 #error ABSL_THREAD_IDENTITY_MODE_USE_TLS cannot be directly set
199 #define ABSL_THREAD_IDENTITY_MODE_USE_TLS 1
202 #ifdef ABSL_THREAD_IDENTITY_MODE_USE_CPP11
203 #error ABSL_THREAD_IDENTITY_MODE_USE_CPP11 cannot be directly set
205 #define ABSL_THREAD_IDENTITY_MODE_USE_CPP11 2
208 #ifdef ABSL_THREAD_IDENTITY_MODE
209 #error ABSL_THREAD_IDENTITY_MODE cannot be directly set
210 #elif defined(ABSL_FORCE_THREAD_IDENTITY_MODE)
211 #define ABSL_THREAD_IDENTITY_MODE ABSL_FORCE_THREAD_IDENTITY_MODE
212 #elif defined(_WIN32) && !defined(__MINGW32__)
213 #define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11
214 #elif defined(__APPLE__) && defined(ABSL_HAVE_THREAD_LOCAL)
215 #define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_CPP11
216 #elif ABSL_PER_THREAD_TLS && defined(__GOOGLE_GRTE_VERSION__) && \
217 (__GOOGLE_GRTE_VERSION__ >= 20140228L)
221 #define ABSL_THREAD_IDENTITY_MODE ABSL_THREAD_IDENTITY_MODE_USE_TLS
223 #define ABSL_THREAD_IDENTITY_MODE \
224 ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC
227 #if ABSL_THREAD_IDENTITY_MODE == ABSL_THREAD_IDENTITY_MODE_USE_TLS || \
228 ABSL_THREAD_IDENTITY_MODE == ABSL_THREAD_IDENTITY_MODE_USE_CPP11
230 #if ABSL_PER_THREAD_TLS
233 #elif defined(ABSL_HAVE_THREAD_LOCAL)
234 ABSL_CONST_INIT extern thread_local ThreadIdentity* thread_identity_ptr;
236 #error Thread-local storage not detected on this platform
245 #if !defined(__APPLE__) && !defined(ABSL_BUILD_DLL) && \
246 !defined(ABSL_CONSUME_DLL)
247 #define ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT 1
250 #ifdef ABSL_INTERNAL_INLINE_CURRENT_THREAD_IDENTITY_IF_PRESENT
252 return thread_identity_ptr;
256 #elif ABSL_THREAD_IDENTITY_MODE != \
257 ABSL_THREAD_IDENTITY_MODE_USE_POSIX_SETSPECIFIC
258 #error Unknown ABSL_THREAD_IDENTITY_MODE
265 #endif // ABSL_BASE_INTERNAL_THREAD_IDENTITY_H_
std::atomic< int > ticker
std::atomic< int > wait_start
#define ABSL_NAMESPACE_END
ThreadIdentity * CurrentThreadIdentityIfPresent()
struct absl::base_internal::ThreadIdentity::WaiterState waiter_state
#define ABSL_NAMESPACE_BEGIN
ThreadIdentity * thread_identity()
PerThreadSynch per_thread_synch
#define ABSL_PER_THREAD_TLS_KEYWORD
bool suppress_fatal_errors
std::atomic< int > * blocked_count_ptr
ABSL_CONST_INIT void SetCurrentThreadIdentity(ThreadIdentity *identity, ThreadIdentityReclaimerFunction reclaimer)
void ClearCurrentThreadIdentity()
int64_t next_priority_read_cycles
void(*)(void *) ThreadIdentityReclaimerFunction
static constexpr int kLowZeroBits
std::atomic< State > state
static constexpr int kAlignment
std::atomic< bool > is_idle
SynchLocksHeld * all_locks
grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:35