|  |  | 
|  | /* | 
|  | * Copyright (C) Igor Sysoev | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef _NGX_THREAD_H_INCLUDED_ | 
|  | #define _NGX_THREAD_H_INCLUDED_ | 
|  |  | 
|  |  | 
|  | #include <ngx_config.h> | 
|  | #include <ngx_core.h> | 
|  |  | 
|  |  | 
|  | typedef HANDLE  ngx_tid_t; | 
|  | typedef DWORD   ngx_tls_key_t; | 
|  | typedef DWORD   ngx_thread_value_t; | 
|  |  | 
|  |  | 
|  | typedef struct { | 
|  | HANDLE      mutex; | 
|  | ngx_log_t   *log; | 
|  | } ngx_mutex_t; | 
|  |  | 
|  |  | 
|  | ngx_err_t ngx_create_thread(ngx_tid_t *tid, | 
|  | ngx_thread_value_t (__stdcall *func)(void *arg), void *arg, ngx_log_t *log); | 
|  | ngx_int_t ngx_init_threads(int n, size_t size, ngx_cycle_t *cycle); | 
|  |  | 
|  | ngx_err_t ngx_thread_key_create(ngx_tls_key_t *key); | 
|  | #define ngx_thread_key_create_n     "TlsAlloc()" | 
|  | ngx_err_t ngx_thread_set_tls(ngx_tls_key_t *key, void *data); | 
|  | #define ngx_thread_set_tls_n         "TlsSetValue()" | 
|  | #define ngx_thread_get_tls           TlsGetValue | 
|  |  | 
|  |  | 
|  | #define ngx_thread_volatile  volatile | 
|  |  | 
|  | #define ngx_log_tid                 GetCurrentThreadId() | 
|  | #define NGX_TID_T_FMT               "%ud" | 
|  |  | 
|  |  | 
|  | ngx_mutex_t *ngx_mutex_init(ngx_log_t *log, ngx_uint_t flags); | 
|  |  | 
|  | void ngx_mutex_lock(ngx_mutex_t *m); | 
|  | ngx_int_t ngx_mutex_trylock(ngx_mutex_t *m); | 
|  | void ngx_mutex_unlock(ngx_mutex_t *m); | 
|  |  | 
|  |  | 
|  | /* STUB */ | 
|  | #define NGX_MUTEX_LIGHT             0 | 
|  | /**/ | 
|  |  | 
|  |  | 
|  | extern ngx_int_t  ngx_threads_n; | 
|  |  | 
|  |  | 
|  | #endif /* _NGX_THREAD_H_INCLUDED_ */ |