/** * @file thread_pool.h * * @brief Interface of thread_pool_t. * */ /* * Copyright (C) 2005-2006 Martin Willi * Copyright (C) 2005 Jan Hutter * Hochschule fuer Technik Rapperswil * * 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. See . * * 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. */ #ifndef THREAD_POOL_H_ #define THREAD_POOL_H_ typedef struct thread_pool_t thread_pool_t; #include #include /** * @brief A thread_pool consists of a pool of threads processing jobs from the job queue. * * Current implementation uses as many threads as specified in constructor. * A more improved version would dynamically increase thread count if necessary. * * @b Constructors: * - thread_pool_create() * * @todo Add support for dynamic thread handling * * @ingroup processing */ struct thread_pool_t { /** * @brief Return currently instanciated thread count. * * @param thread_pool calling object * @return size of thread pool */ u_int (*get_pool_size) (thread_pool_t *thread_pool); /** * @brief Get the number of threads currently waiting for work. * * @param thread_pool calling object * @return number of idle threads */ u_int (*get_idle_threads) (thread_pool_t *thread_pool); /** * @brief Destroy a thread_pool_t object. * * Sends cancellation request to all threads and AWAITS their termination. * * @param thread_pool calling object */ void (*destroy) (thread_pool_t *thread_pool); }; /** * @brief Create the thread pool using using pool_size of threads. * * @param pool_size desired pool size * @return * - thread_pool_t object if one ore more threads could be started, or * - NULL if no threads could be created * * @ingroup processing */ thread_pool_t *thread_pool_create(size_t pool_size); #endif /*THREAD_POOL_H_*/