comparison src/os/unix/ngx_thread_id.c @ 6018:466bd63b63d1

Thread pools implementation.
author Valentin Bartenev <vbart@nginx.com>
date Sat, 14 Mar 2015 17:37:07 +0300
parents
children
comparison
equal deleted inserted replaced
6017:83d54192e97b 6018:466bd63b63d1
1
2 /*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) Nginx, Inc.
5 */
6
7
8 #include <ngx_config.h>
9 #include <ngx_core.h>
10 #include <ngx_thread_pool.h>
11
12
13 #if (NGX_LINUX)
14
15 /*
16 * Linux thread id is a pid of thread created by clone(2),
17 * glibc does not provide a wrapper for gettid().
18 */
19
20 ngx_tid_t
21 ngx_thread_tid(void)
22 {
23 return syscall(SYS_gettid);
24 }
25
26 #elif (NGX_FREEBSD) && (__FreeBSD_version >= 900031)
27
28 #include <pthread_np.h>
29
30 ngx_tid_t
31 ngx_thread_tid(void)
32 {
33 return pthread_getthreadid_np();
34 }
35
36 #elif (NGX_DARWIN)
37
38 /*
39 * MacOSX thread has two thread ids:
40 *
41 * 1) MacOSX 10.6 (Snow Leoprad) has pthread_threadid_np() returning
42 * an uint64_t value, which is obtained using the __thread_selfid()
43 * syscall. It is a number above 300,000.
44 */
45
46 ngx_tid_t
47 ngx_thread_tid(void)
48 {
49 uint64_t tid;
50
51 (void) pthread_threadid_np(NULL, &tid);
52 return tid;
53 }
54
55 /*
56 * 2) Kernel thread mach_port_t returned by pthread_mach_thread_np().
57 * It is a number in range 100-100,000.
58 *
59 * return pthread_mach_thread_np(pthread_self());
60 */
61
62 #else
63
64 ngx_tid_t
65 ngx_thread_tid(void)
66 {
67 return (uint64_t) (uintptr_t) pthread_self();
68 }
69
70 #endif