#include #if defined(OS_LINUX) #include #include #elif defined(OS_FREEBSD) #include #else #include #include #endif static thread_local uint64_t current_tid = 0; uint64_t getThreadId() { if (!current_tid) { #if defined(OS_LINUX) current_tid = syscall(SYS_gettid); /// This call is always successful. - man gettid #elif defined(OS_FREEBSD) current_tid = pthread_getthreadid_np(); #else if (0 != pthread_threadid_np(nullptr, ¤t_tid)) throw std::logic_error("pthread_threadid_np returned error"); #endif } return current_tid; }