#ifndef HAKMEM_POOL_TLS_BIND_H #define HAKMEM_POOL_TLS_BIND_H #include #include #include #include /** * POOL_TLS_BIND_BOX - TID Cache for Fast Same-Thread Detection * * Box Theory: * - Boundary: Thread initialization - cache TID in TLS once * - Internal: Hot path uses TID comparison (no gettid syscall) * - Fallback: gettid_cached() on first access * * Performance: * - Eliminates repeated gettid() calls from hot path * - Simple TID comparison (1 comparison vs registry lookup) * - Expected: Reduce cache misses and syscall overhead */ // TLS binding for fast TID caching typedef struct PoolTLSBind { pid_t tid; // My thread ID (cached, 0 = uninitialized) } PoolTLSBind; // TLS cache (per-thread, automatically zero-initialized) extern __thread PoolTLSBind g_pool_tls_bind; // Inline helper: gettid with caching static inline pid_t gettid_cached(void) { static __thread pid_t cached_tid = 0; if (__builtin_expect(cached_tid == 0, 0)) { cached_tid = (pid_t)syscall(SYS_gettid); } return cached_tid; } // API // Get my thread ID (cached in TLS) static inline pid_t pool_get_my_tid(void) { if (__builtin_expect(g_pool_tls_bind.tid == 0, 0)) { g_pool_tls_bind.tid = gettid_cached(); } return g_pool_tls_bind.tid; } // Fast same-thread check (TID comparison only) // Returns 1 if owner_tid matches my TID, 0 otherwise static inline int pool_tls_is_mine_tid(pid_t owner_tid) { return owner_tid == pool_get_my_tid(); } #endif // HAKMEM_POOL_TLS_BIND_H