25 #ifndef __MOTR_LIB_THREAD_POOL_H__ 26 #define __MOTR_LIB_THREAD_POOL_H__ 103 int thread_nr,
int qlinks_nr);
109 int (*process)(
void *job));
112 void **job,
int *
rc);
116 #define M0_PARALLEL_FOR(name, pool, list, process) \ 119 typeof (name ## _tlist_head(NULL)) obj; \ 120 m0_tl_for(name, list, obj) { \ 121 rc = m0_parallel_pool_job_add(pool, obj); \ 122 if (rc == -EFBIG) { \ 123 m0_parallel_pool_start(pool, process); \ 124 rc = m0_parallel_pool_wait(pool); \ 127 rc = m0_parallel_pool_job_add(pool, obj); \ 132 m0_parallel_pool_start(pool, process); \ 133 rc = m0_parallel_pool_wait(pool); \ M0_INTERNAL int m0_parallel_pool_job_add(struct m0_parallel_pool *pool, void *item)
M0_INTERNAL int m0_parallel_pool_rc_next(struct m0_parallel_pool *pool, void **job, int *rc)
struct m0_parallel_queue_link * pp_qlinks
M0_INTERNAL int m0_parallel_pool_wait(struct m0_parallel_pool *pool)
struct m0_parallel_queue * pp_queue
M0_INTERNAL void m0_parallel_pool_fini(struct m0_parallel_pool *pool)
struct m0_semaphore pp_ready
M0_INTERNAL int m0_parallel_pool_init(struct m0_parallel_pool *pool, int thread_nr, int qlinks_nr)
M0_INTERNAL void m0_parallel_pool_start(struct m0_parallel_pool *pool, int(*process)(void *job))
M0_INTERNAL void m0_parallel_pool_terminate_wait(struct m0_parallel_pool *pool)
static struct m0_pool pool
int(* pp_process)(void *job)
struct m0_semaphore pp_sync
struct m0_thread * pp_threads