Annotation of embedaddon/nginx/src/os/unix/ngx_thread.h, revision 1.1.1.1
1.1 misho 1:
2: /*
3: * Copyright (C) Igor Sysoev
4: * Copyright (C) Nginx, Inc.
5: */
6:
7:
8: #ifndef _NGX_THREAD_H_INCLUDED_
9: #define _NGX_THREAD_H_INCLUDED_
10:
11:
12: #include <ngx_config.h>
13: #include <ngx_core.h>
14:
15: #if (NGX_THREADS)
16:
17: #define NGX_MAX_THREADS 128
18:
19: #if (NGX_USE_RFORK)
20: #include <ngx_freebsd_rfork_thread.h>
21:
22:
23: #else /* use pthreads */
24:
25: #include <pthread.h>
26:
27: typedef pthread_t ngx_tid_t;
28:
29: #define ngx_thread_self() pthread_self()
30: #define ngx_log_tid (int) ngx_thread_self()
31:
32: #if (NGX_FREEBSD) && !(NGX_LINUXTHREADS)
33: #define NGX_TID_T_FMT "%p"
34: #else
35: #define NGX_TID_T_FMT "%d"
36: #endif
37:
38:
39: typedef pthread_key_t ngx_tls_key_t;
40:
41: #define ngx_thread_key_create(key) pthread_key_create(key, NULL)
42: #define ngx_thread_key_create_n "pthread_key_create()"
43: #define ngx_thread_set_tls pthread_setspecific
44: #define ngx_thread_set_tls_n "pthread_setspecific()"
45: #define ngx_thread_get_tls pthread_getspecific
46:
47:
48: #define NGX_MUTEX_LIGHT 0
49:
50: typedef struct {
51: pthread_mutex_t mutex;
52: ngx_log_t *log;
53: } ngx_mutex_t;
54:
55: typedef struct {
56: pthread_cond_t cond;
57: ngx_log_t *log;
58: } ngx_cond_t;
59:
60: #define ngx_thread_sigmask pthread_sigmask
61: #define ngx_thread_sigmask_n "pthread_sigmask()"
62:
63: #define ngx_thread_join(t, p) pthread_join(t, p)
64:
65: #define ngx_setthrtitle(n)
66:
67:
68:
69: ngx_int_t ngx_mutex_trylock(ngx_mutex_t *m);
70: void ngx_mutex_lock(ngx_mutex_t *m);
71: void ngx_mutex_unlock(ngx_mutex_t *m);
72:
73: #endif
74:
75:
76: #define ngx_thread_volatile volatile
77:
78:
79: typedef struct {
80: ngx_tid_t tid;
81: ngx_cond_t *cv;
82: ngx_uint_t state;
83: } ngx_thread_t;
84:
85: #define NGX_THREAD_FREE 1
86: #define NGX_THREAD_BUSY 2
87: #define NGX_THREAD_EXIT 3
88: #define NGX_THREAD_DONE 4
89:
90: extern ngx_int_t ngx_threads_n;
91: extern volatile ngx_thread_t ngx_threads[NGX_MAX_THREADS];
92:
93:
94: typedef void * ngx_thread_value_t;
95:
96: ngx_int_t ngx_init_threads(int n, size_t size, ngx_cycle_t *cycle);
97: ngx_err_t ngx_create_thread(ngx_tid_t *tid,
98: ngx_thread_value_t (*func)(void *arg), void *arg, ngx_log_t *log);
99:
100: ngx_mutex_t *ngx_mutex_init(ngx_log_t *log, ngx_uint_t flags);
101: void ngx_mutex_destroy(ngx_mutex_t *m);
102:
103:
104: ngx_cond_t *ngx_cond_init(ngx_log_t *log);
105: void ngx_cond_destroy(ngx_cond_t *cv);
106: ngx_int_t ngx_cond_wait(ngx_cond_t *cv, ngx_mutex_t *m);
107: ngx_int_t ngx_cond_signal(ngx_cond_t *cv);
108:
109:
110: #else /* !NGX_THREADS */
111:
112: #define ngx_thread_volatile
113:
114: #define ngx_log_tid 0
115: #define NGX_TID_T_FMT "%d"
116:
117: #define ngx_mutex_trylock(m) NGX_OK
118: #define ngx_mutex_lock(m)
119: #define ngx_mutex_unlock(m)
120:
121: #define ngx_cond_signal(cv)
122:
123: #define ngx_thread_main() 1
124:
125: #endif
126:
127:
128: #endif /* _NGX_THREAD_H_INCLUDED_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>