1*27162e4eSAndroid Build Coastguard Worker /* 2*27162e4eSAndroid Build Coastguard Worker threadpool.h - part of lz4 project 3*27162e4eSAndroid Build Coastguard Worker Copyright (C) Yann Collet 2023 4*27162e4eSAndroid Build Coastguard Worker GPL v2 License 5*27162e4eSAndroid Build Coastguard Worker 6*27162e4eSAndroid Build Coastguard Worker This program is free software; you can redistribute it and/or modify 7*27162e4eSAndroid Build Coastguard Worker it under the terms of the GNU General Public License as published by 8*27162e4eSAndroid Build Coastguard Worker the Free Software Foundation; either version 2 of the License, or 9*27162e4eSAndroid Build Coastguard Worker (at your option) any later version. 10*27162e4eSAndroid Build Coastguard Worker 11*27162e4eSAndroid Build Coastguard Worker This program is distributed in the hope that it will be useful, 12*27162e4eSAndroid Build Coastguard Worker but WITHOUT ANY WARRANTY; without even the implied warranty of 13*27162e4eSAndroid Build Coastguard Worker MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14*27162e4eSAndroid Build Coastguard Worker GNU General Public License for more details. 15*27162e4eSAndroid Build Coastguard Worker 16*27162e4eSAndroid Build Coastguard Worker You should have received a copy of the GNU General Public License along 17*27162e4eSAndroid Build Coastguard Worker with this program; if not, write to the Free Software Foundation, Inc., 18*27162e4eSAndroid Build Coastguard Worker 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 19*27162e4eSAndroid Build Coastguard Worker 20*27162e4eSAndroid Build Coastguard Worker You can contact the author at : 21*27162e4eSAndroid Build Coastguard Worker - LZ4 source repository : https://github.com/lz4/lz4 22*27162e4eSAndroid Build Coastguard Worker - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c 23*27162e4eSAndroid Build Coastguard Worker */ 24*27162e4eSAndroid Build Coastguard Worker 25*27162e4eSAndroid Build Coastguard Worker #ifndef THREADPOOL_H 26*27162e4eSAndroid Build Coastguard Worker #define THREADPOOL_H 27*27162e4eSAndroid Build Coastguard Worker 28*27162e4eSAndroid Build Coastguard Worker #if defined (__cplusplus) 29*27162e4eSAndroid Build Coastguard Worker extern "C" { 30*27162e4eSAndroid Build Coastguard Worker #endif 31*27162e4eSAndroid Build Coastguard Worker 32*27162e4eSAndroid Build Coastguard Worker typedef struct TPool_s TPool; 33*27162e4eSAndroid Build Coastguard Worker 34*27162e4eSAndroid Build Coastguard Worker /*! TPool_create() : 35*27162e4eSAndroid Build Coastguard Worker * Create a thread pool with at most @nbThreads. 36*27162e4eSAndroid Build Coastguard Worker * @nbThreads must be at least 1. 37*27162e4eSAndroid Build Coastguard Worker * @queueSize is the maximum number of pending jobs before blocking. 38*27162e4eSAndroid Build Coastguard Worker * @return : TPool* pointer on success, else NULL. 39*27162e4eSAndroid Build Coastguard Worker */ 40*27162e4eSAndroid Build Coastguard Worker TPool* TPool_create(int nbThreads, int queueSize); 41*27162e4eSAndroid Build Coastguard Worker 42*27162e4eSAndroid Build Coastguard Worker /*! TPool_free() : 43*27162e4eSAndroid Build Coastguard Worker * Free a thread pool returned by TPool_create(). 44*27162e4eSAndroid Build Coastguard Worker * Waits for the completion of running jobs before freeing resources. 45*27162e4eSAndroid Build Coastguard Worker */ 46*27162e4eSAndroid Build Coastguard Worker void TPool_free(TPool* ctx); 47*27162e4eSAndroid Build Coastguard Worker 48*27162e4eSAndroid Build Coastguard Worker /*! TPool_submitJob() : 49*27162e4eSAndroid Build Coastguard Worker * Add @job_function(arg) to the thread pool. 50*27162e4eSAndroid Build Coastguard Worker * @ctx must be valid. 51*27162e4eSAndroid Build Coastguard Worker * Invocation can block if queue is full. 52*27162e4eSAndroid Build Coastguard Worker * Note: Ensure @arg's lifetime extends until @job_function completes. 53*27162e4eSAndroid Build Coastguard Worker * Alternatively, @arg's lifetime must be managed by @job_function. 54*27162e4eSAndroid Build Coastguard Worker */ 55*27162e4eSAndroid Build Coastguard Worker void TPool_submitJob(TPool* ctx, void (*job_function)(void*), void* arg); 56*27162e4eSAndroid Build Coastguard Worker 57*27162e4eSAndroid Build Coastguard Worker /*! TPool_jobsCompleted() : 58*27162e4eSAndroid Build Coastguard Worker * Blocks until all queued jobs are completed. 59*27162e4eSAndroid Build Coastguard Worker */ 60*27162e4eSAndroid Build Coastguard Worker void TPool_jobsCompleted(TPool* ctx); 61*27162e4eSAndroid Build Coastguard Worker 62*27162e4eSAndroid Build Coastguard Worker 63*27162e4eSAndroid Build Coastguard Worker 64*27162e4eSAndroid Build Coastguard Worker #if defined (__cplusplus) 65*27162e4eSAndroid Build Coastguard Worker } 66*27162e4eSAndroid Build Coastguard Worker #endif 67*27162e4eSAndroid Build Coastguard Worker 68*27162e4eSAndroid Build Coastguard Worker #endif /* THREADPOOL_H */ 69