支持:C++11 及早前标准库版本,而无需使用:std::this_thread::get_id()。
支持:NDK/ANDROID、Windows、Linux、MacOS X 等多个操作系统平台。
int64_t GetCurrentThreadId() noexcept {
#if defined(_WIN32) || defined(_WIN64)
return ::GetCurrentThreadId();
#else
// https://android.googlesource.com/platform/bionic/+/master/libc/bionic/gettid.cpp
// ::gettid();
#if defined(SYS_gettid)
return syscall(SYS_gettid); /* syscall(__NR_gettid) or syscall(SYS_gettid); */
#elif defined(__NR_gettid) || defined(_ANDROID)
return syscall(__NR_gettid);
#else
/* https://elliotth.blogspot.com/2012/04/gettid-on-mac-os.html */
uint64_t tid;
pthread_threadid_np(NULL, &tid);
return static_cast<int64_t>(tid);
#endif
#endif
}