libUPnP  1.8.0
Data Structures | Defines | Typedefs | Enumerations | Functions
ThreadPool.h File Reference
#include "FreeList.h"
#include "ithread.h"
#include "LinkedList.h"
#include "UpnpInet.h"
#include "UpnpGlobal.h"
#include <errno.h>
#include <sys/param.h>
#include <sys/time.h>
Include dependency graph for ThreadPool.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  THREADPOOLATTR
struct  THREADPOOLJOB
struct  TPOOLSTATS
struct  THREADPOOL
 A thread pool similar to the thread pool in the UPnP SDK. More...

Defines

#define JOBFREELISTSIZE   100
#define INFINITE_THREADS   -1
#define EMAXTHREADS   (-8 & 1<<29)
#define INVALID_POLICY   (-9 & 1<<29)
#define INVALID_JOB_ID   (-2 & 1<<29)
#define DEFAULT_PRIORITY   MED_PRIORITY
#define DEFAULT_MIN_THREADS   1
#define DEFAULT_MAX_THREADS   10
#define DEFAULT_JOBS_PER_THREAD   10
#define DEFAULT_STARVATION_TIME   500
#define DEFAULT_IDLE_TIME   10 * 1000
#define DEFAULT_FREE_ROUTINE   NULL
#define DEFAULT_MAX_JOBS_TOTAL   100
#define STATS   1
 Statistics.
#define DEFAULT_POLICY   SCHED_OTHER
#define DEFAULT_SCHED_PARAM   0

Typedefs

typedef enum duration Duration
typedef enum priority ThreadPriority
typedef int PolicyType
typedef void(* free_routine )(void *arg)
typedef struct THREADPOOLATTR ThreadPoolAttr
typedef struct THREADPOOLJOB ThreadPoolJob
typedef struct TPOOLSTATS ThreadPoolStats
typedef struct THREADPOOL ThreadPool
 A thread pool similar to the thread pool in the UPnP SDK.

Enumerations

enum  duration { SHORT_TERM, PERSISTENT }
enum  priority { LOW_PRIORITY, MED_PRIORITY, HIGH_PRIORITY }

Functions

int ThreadPoolInit (ThreadPool *tp, ThreadPoolAttr *attr)
int ThreadPoolAddPersistent (ThreadPool *tp, ThreadPoolJob *job, int *jobId)
int ThreadPoolGetAttr (ThreadPool *tp, ThreadPoolAttr *out)
int ThreadPoolSetAttr (ThreadPool *tp, ThreadPoolAttr *attr)
int ThreadPoolAdd (ThreadPool *tp, ThreadPoolJob *job, int *jobId)
int ThreadPoolRemove (ThreadPool *tp, int jobId, ThreadPoolJob *out)
int ThreadPoolShutdown (ThreadPool *tp)
int TPJobInit (ThreadPoolJob *job, start_routine func, void *arg)
int TPJobSetPriority (ThreadPoolJob *job, ThreadPriority priority)
int TPJobSetFreeFunction (ThreadPoolJob *job, free_routine func)
int TPAttrInit (ThreadPoolAttr *attr)
int TPAttrSetMaxThreads (ThreadPoolAttr *attr, int maxThreads)
int TPAttrSetMinThreads (ThreadPoolAttr *attr, int minThreads)
int TPAttrSetIdleTime (ThreadPoolAttr *attr, int idleTime)
int TPAttrSetJobsPerThread (ThreadPoolAttr *attr, int jobsPerThread)
int TPAttrSetStarvationTime (ThreadPoolAttr *attr, int starvationTime)
int TPAttrSetSchedPolicy (ThreadPoolAttr *attr, PolicyType schedPolicy)
int TPAttrSetMaxJobsTotal (ThreadPoolAttr *attr, int maxJobsTotal)
int ThreadPoolGetStats (ThreadPool *tp, ThreadPoolStats *stats)
void ThreadPoolPrintStats (ThreadPoolStats *stats)

Detailed Description


Define Documentation

#define DEFAULT_FREE_ROUTINE   NULL

default free routine used TPJobInit

#define DEFAULT_IDLE_TIME   10 * 1000

default idle time used by TPAttrInit

#define DEFAULT_JOBS_PER_THREAD   10

default jobs per thread used by TPAttrInit

#define DEFAULT_MAX_JOBS_TOTAL   100

default max jobs used TPAttrInit

#define DEFAULT_MAX_THREADS   10

default max used by TPAttrInit

#define DEFAULT_MIN_THREADS   1

default minimum used by TPAttrInit

#define DEFAULT_PRIORITY   MED_PRIORITY

default priority used by TPJobInit

#define DEFAULT_SCHED_PARAM   0

Default priority

#define DEFAULT_STARVATION_TIME   500

default starvation time used by TPAttrInit

#define INVALID_JOB_ID   (-2 & 1<<29)

Invalid JOB Id

#define INVALID_POLICY   (-9 & 1<<29)

Invalid Policy

#define JOBFREELISTSIZE   100

Size of job free list

#define STATS   1

Statistics.

Always include stats because code change is minimal.


Typedef Documentation

typedef struct THREADPOOL ThreadPool

A thread pool similar to the thread pool in the UPnP SDK.

Allows jobs to be scheduled for running by threads in a thread pool. The thread pool is initialized with a minimum and maximum thread number as well as a max idle time and a jobs per thread ratio. If a worker thread waits the whole max idle time without receiving a job and the thread pool currently has more threads running than the minimum then the worker thread will exit. If when scheduling a job the current job to thread ratio becomes greater than the set ratio and the thread pool currently has less than the maximum threads then a new thread will be created.