mirror of
https://github.com/nginx/nginx.git
synced 2025-06-07 17:52:38 +08:00
71 lines
1.1 KiB
C
71 lines
1.1 KiB
C
|
|
/*
|
|
* Copyright (C) Igor Sysoev
|
|
* Copyright (C) Nginx, Inc.
|
|
*/
|
|
|
|
|
|
#include <ngx_config.h>
|
|
#include <ngx_core.h>
|
|
#include <ngx_thread_pool.h>
|
|
|
|
|
|
#if (NGX_LINUX)
|
|
|
|
/*
|
|
* Linux thread id is a pid of thread created by clone(2),
|
|
* glibc does not provide a wrapper for gettid().
|
|
*/
|
|
|
|
ngx_tid_t
|
|
ngx_thread_tid(void)
|
|
{
|
|
return syscall(SYS_gettid);
|
|
}
|
|
|
|
#elif (NGX_FREEBSD) && (__FreeBSD_version >= 900031)
|
|
|
|
#include <pthread_np.h>
|
|
|
|
ngx_tid_t
|
|
ngx_thread_tid(void)
|
|
{
|
|
return pthread_getthreadid_np();
|
|
}
|
|
|
|
#elif (NGX_DARWIN)
|
|
|
|
/*
|
|
* MacOSX thread has two thread ids:
|
|
*
|
|
* 1) MacOSX 10.6 (Snow Leoprad) has pthread_threadid_np() returning
|
|
* an uint64_t value, which is obtained using the __thread_selfid()
|
|
* syscall. It is a number above 300,000.
|
|
*/
|
|
|
|
ngx_tid_t
|
|
ngx_thread_tid(void)
|
|
{
|
|
uint64_t tid;
|
|
|
|
(void) pthread_threadid_np(NULL, &tid);
|
|
return tid;
|
|
}
|
|
|
|
/*
|
|
* 2) Kernel thread mach_port_t returned by pthread_mach_thread_np().
|
|
* It is a number in range 100-100,000.
|
|
*
|
|
* return pthread_mach_thread_np(pthread_self());
|
|
*/
|
|
|
|
#else
|
|
|
|
ngx_tid_t
|
|
ngx_thread_tid(void)
|
|
{
|
|
return (uint64_t) (uintptr_t) pthread_self();
|
|
}
|
|
|
|
#endif
|