/* threadpool.h - part of lz4 project Copyright (C) Yann Collet 2023 GPL v2 License This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. You can contact the author at : - LZ4 source repository : https://github.com/lz4/lz4 - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c */ #ifndef THREADPOOL_H #define THREADPOOL_H #if defined (__cplusplus) extern "C" { #endif typedef struct TPool_s TPool; /*! TPool_create() : * Create a thread pool with at most @nbThreads. * @nbThreads must be at least 1. * @queueSize is the maximum number of pending jobs before blocking. * @return : TPool* pointer on success, else NULL. */ TPool* TPool_create(int nbThreads, int queueSize); /*! TPool_free() : * Free a thread pool returned by TPool_create(). * Waits for the completion of running jobs before freeing resources. */ void TPool_free(TPool* ctx); /*! TPool_submitJob() : * Add @job_function(arg) to the thread pool. * @ctx must be valid. * Invocation can block if queue is full. * Note: Ensure @arg's lifetime extends until @job_function completes. * Alternatively, @arg's lifetime must be managed by @job_function. */ void TPool_submitJob(TPool* ctx, void (*job_function)(void*), void* arg); /*! TPool_jobsCompleted() : * Blocks until all queued jobs are completed. */ void TPool_jobsCompleted(TPool* ctx); #if defined (__cplusplus) } #endif #endif /* THREADPOOL_H */