xref: /unit/src/nxt_thread_pool.h (revision 4:76c63e9b6322)
10Sigor@sysoev.ru 
20Sigor@sysoev.ru /*
30Sigor@sysoev.ru  * Copyright (C) Igor Sysoev
40Sigor@sysoev.ru  * Copyright (C) NGINX, Inc.
50Sigor@sysoev.ru  */
60Sigor@sysoev.ru 
70Sigor@sysoev.ru #ifndef _NXT_UNIX_THREAD_POOL_H_INCLUDED_
80Sigor@sysoev.ru #define _NXT_UNIX_THREAD_POOL_H_INCLUDED_
90Sigor@sysoev.ru 
100Sigor@sysoev.ru 
110Sigor@sysoev.ru typedef void (*nxt_thread_pool_init_t)(void);
120Sigor@sysoev.ru 
130Sigor@sysoev.ru 
140Sigor@sysoev.ru struct nxt_thread_pool_s {
150Sigor@sysoev.ru     nxt_atomic_t             ready;
160Sigor@sysoev.ru     nxt_atomic_t             waiting;
170Sigor@sysoev.ru     nxt_atomic_t             threads;
180Sigor@sysoev.ru     nxt_uint_t               max_threads;
190Sigor@sysoev.ru 
200Sigor@sysoev.ru     nxt_sem_t                sem;
210Sigor@sysoev.ru     nxt_nsec_t               timeout;
220Sigor@sysoev.ru 
23*4Sigor@sysoev.ru     nxt_work_t               work;
241Sigor@sysoev.ru     nxt_task_t               task;
251Sigor@sysoev.ru 
260Sigor@sysoev.ru     nxt_locked_work_queue_t  work_queue;
270Sigor@sysoev.ru 
280Sigor@sysoev.ru     nxt_thread_handle_t      main;
290Sigor@sysoev.ru 
300Sigor@sysoev.ru     nxt_event_engine_t       *engine;
310Sigor@sysoev.ru     nxt_thread_pool_init_t   init;
320Sigor@sysoev.ru     nxt_work_handler_t       exit;
330Sigor@sysoev.ru };
340Sigor@sysoev.ru 
350Sigor@sysoev.ru 
360Sigor@sysoev.ru NXT_EXPORT nxt_thread_pool_t *nxt_thread_pool_create(nxt_uint_t max_threads,
370Sigor@sysoev.ru     nxt_nsec_t timeout, nxt_thread_pool_init_t init,
380Sigor@sysoev.ru     nxt_event_engine_t *engine, nxt_work_handler_t exit);
390Sigor@sysoev.ru NXT_EXPORT void nxt_thread_pool_destroy(nxt_thread_pool_t *tp);
400Sigor@sysoev.ru NXT_EXPORT nxt_int_t nxt_thread_pool_post(nxt_thread_pool_t *tp,
41*4Sigor@sysoev.ru     nxt_work_t *work);
420Sigor@sysoev.ru 
430Sigor@sysoev.ru 
440Sigor@sysoev.ru #endif /* _NXT_UNIX_THREAD_POOL_H_INCLUDED_ */
45