55 int gettimeofday(
struct timeval *tv,
struct timezone *tz);
57 #include <sys/param.h>
59 #if defined(__OSX__) || defined(__APPLE__) || defined(__NetBSD__)
60 #include <sys/resource.h>
69#define JOBFREELISTSIZE 100
71#define INFINITE_THREADS -1
73#define EMAXTHREADS (-8 & 1<<29)
76#define INVALID_POLICY (-9 & 1<<29)
79#define INVALID_JOB_ID (-2 & 1<<29)
81typedef enum duration {
86typedef enum priority {
93#define DEFAULT_PRIORITY MED_PRIORITY
96#define DEFAULT_MIN_THREADS 1
99#define DEFAULT_MAX_THREADS 10
102#define DEFAULT_STACK_SIZE 0u
105#define DEFAULT_JOBS_PER_THREAD 10
108#define DEFAULT_STARVATION_TIME 500
111#define DEFAULT_IDLE_TIME 10 * 1000
114#define DEFAULT_FREE_ROUTINE NULL
117#define DEFAULT_MAX_JOBS_TOTAL 100
130typedef int PolicyType;
132#define DEFAULT_POLICY SCHED_OTHER
168 struct timeval requestTime;
169 ThreadPriority priority;
185 double totalWorkTime;
186 double totalIdleTime;
189 int persistentThreads;
386 ThreadPriority priority);
484 PolicyType schedPolicy);
int ThreadPoolInit(ThreadPool *tp, ThreadPoolAttr *attr)
Initializes and starts ThreadPool. Must be called first and only once for ThreadPool.
Definition ThreadPool.c:700
int ThreadPoolAdd(ThreadPool *tp, ThreadPoolJob *job, int *jobId)
Adds a job to the thread pool. Job will be run as soon as possible.
Definition ThreadPool.c:816
struct THREADPOOL ThreadPool
A thread pool similar to the thread pool in the UPnP SDK.
int TPJobSetFreeFunction(ThreadPoolJob *job, free_routine func)
Sets the max threads for the thread pool attributes.
Definition ThreadPool.c:1098
int ThreadPoolShutdown(ThreadPool *tp)
Shuts the thread pool down. Waits for all threads to finish. May block indefinitely if jobs do not ex...
Definition ThreadPool.c:978
int ThreadPoolGetAttr(ThreadPool *tp, ThreadPoolAttr *out)
Gets the current set of attributes associated with the thread pool.
Definition ThreadPool.c:924
int TPAttrSetMaxJobsTotal(ThreadPoolAttr *attr, int maxJobsTotal)
Sets the maximum number jobs that can be qeued totally.
Definition ThreadPool.c:1170
int TPJobInit(ThreadPoolJob *job, start_routine func, void *arg)
Initializes thread pool job. Sets the priority to default defined in ThreadPool.h....
Definition ThreadPool.c:1071
EXPORT_SPEC void ThreadPoolPrintStats(ThreadPoolStats *stats)
Definition ThreadPool.c:1180
int TPAttrSetStarvationTime(ThreadPoolAttr *attr, int starvationTime)
Sets the starvation time for the thread pool attributes.
Definition ThreadPool.c:1152
int TPAttrSetMaxThreads(ThreadPoolAttr *attr, int maxThreads)
Sets the max threads for the thread pool attributes.
Definition ThreadPool.c:1107
int TPJobSetPriority(ThreadPoolJob *job, ThreadPriority priority)
Sets the max threads for the thread pool attributes.
Definition ThreadPool.c:1083
struct TPOOLSTATS ThreadPoolStats
int ThreadPoolSetAttr(ThreadPool *tp, ThreadPoolAttr *attr)
Sets the attributes for the thread pool. Only affects future calculations.
Definition ThreadPool.c:937
int ThreadPoolRemove(ThreadPool *tp, int jobId, ThreadPoolJob *out)
Removes a job from the thread pool. Can only remove jobs which are not currently running.
Definition ThreadPool.c:867
struct THREADPOOLATTR ThreadPoolAttr
int TPAttrSetJobsPerThread(ThreadPoolAttr *attr, int jobsPerThread)
Sets the jobs per thread ratio.
Definition ThreadPool.c:1143
struct THREADPOOLJOB ThreadPoolJob
int TPAttrInit(ThreadPoolAttr *attr)
Initializes thread pool attributes. Sets values to defaults defined in ThreadPool....
Definition ThreadPool.c:1055
int TPAttrSetIdleTime(ThreadPoolAttr *attr, int idleTime)
Sets the idle time for the thread pool attributes.
Definition ThreadPool.c:1134
int TPAttrSetMinThreads(ThreadPoolAttr *attr, int minThreads)
Sets the min threads for the thread pool attributes.
Definition ThreadPool.c:1116
int TPAttrSetSchedPolicy(ThreadPoolAttr *attr, PolicyType schedPolicy)
Sets the scheduling policy for the thread pool attributes.
Definition ThreadPool.c:1161
void(* free_routine)(void *arg)
Definition ThreadPool.h:135
int TPAttrSetStackSize(ThreadPoolAttr *attr, size_t stackSize)
Sets the stack size for the thread pool attributes.
Definition ThreadPool.c:1125
int ThreadPoolAddPersistent(ThreadPool *tp, ThreadPoolJob *job, int *jobId)
Adds a persistent job to the thread pool.
Definition ThreadPool.c:768
EXPORT_SPEC int ThreadPoolGetStats(ThreadPool *tp, ThreadPoolStats *stats)
Returns various statistics about the thread pool.
Definition ThreadPool.c:1201
Defines constants that for some reason are not defined on some systems.
#define EXPORT_SPEC
Export functions on WIN32 DLLs.
Definition UpnpGlobal.h:87
#define UPNP_INLINE
Declares an inline function.
Definition UpnpGlobal.h:99
Provides a platform independent way to include TCP/IP types and functions.
Definition LinkedList.h:84
Definition ThreadPool.h:141
int maxJobsTotal
Definition ThreadPool.h:154
PolicyType schedPolicy
Definition ThreadPool.h:159
int maxThreads
Definition ThreadPool.h:145
int jobsPerThread
Definition ThreadPool.h:152
int maxIdleTime
Definition ThreadPool.h:150
int minThreads
Definition ThreadPool.h:143
size_t stackSize
Definition ThreadPool.h:147
int starvationTime
Definition ThreadPool.h:157
Definition ThreadPool.h:164
A thread pool similar to the thread pool in the UPnP SDK.
Definition ThreadPool.h:213
int lastJobId
Definition ThreadPool.h:221
int pendingWorkerThreadStart
Definition ThreadPool.h:227
int busyThreads
Definition ThreadPool.h:229
LinkedList lowJobQ
Definition ThreadPool.h:235
ithread_mutex_t mutex
Definition ThreadPool.h:215
ThreadPoolAttr attr
Definition ThreadPool.h:243
int persistentThreads
Definition ThreadPool.h:231
int totalThreads
Definition ThreadPool.h:225
LinkedList medJobQ
Definition ThreadPool.h:237
int shutdown
Definition ThreadPool.h:223
LinkedList highJobQ
Definition ThreadPool.h:239
ThreadPoolStats stats
Definition ThreadPool.h:245
FreeList jobFreeList
Definition ThreadPool.h:233
ithread_cond_t condition
Definition ThreadPool.h:217
ThreadPoolJob * persistentJob
Definition ThreadPool.h:241
ithread_cond_t start_and_shutdown
Definition ThreadPool.h:219
Definition ThreadPool.h:175