Likewise Base Runtime Library
threadpool.h File Reference

Thread pool API. More...

#include <lw/types.h>
#include <lw/attrs.h>
#include <signal.h>

Typedefs

typedef struct _LW_THREAD_POOL LW_THREAD_POOL
 Thread pool. More...
 
typedef struct _LW_THREAD_POOL * PLW_THREAD_POOL
 
typedef struct _LW_TASK_GROUP LW_TASK_GROUP
 Task group. More...
 
typedef struct _LW_TASK_GROUP * PLW_TASK_GROUP
 
typedef struct _LW_TASK LW_TASK
 Task. More...
 
typedef struct _LW_TASK * PLW_TASK
 
typedef struct
_LW_THREAD_POOL_ATTRIBUTES 
LW_THREAD_POOL_ATTRIBUTES
 Thread pool attributes. More...
 
typedef struct
_LW_THREAD_POOL_ATTRIBUTES * 
PLW_THREAD_POOL_ATTRIBUTES
 
typedef enum _LW_TASK_EVENT_MASK * PLW_TASK_EVENT_MASK
 
typedef struct _LW_WORK_ITEM LW_WORK_ITEM
 Work item structure. More...
 
typedef struct _LW_WORK_ITEM * PLW_WORK_ITEM
 
typedef LW_VOID(* LW_TASK_FUNCTION )(LW_IN PLW_TASK pTask, LW_IN LW_PVOID pContext, LW_IN LW_TASK_EVENT_MASK WakeMask, LW_IN LW_OUT LW_TASK_EVENT_MASK *pWaitMask, LW_IN LW_OUT LW_LONG64 *pllTime)
 Main task function. More...
 
typedef LW_VOID(* LW_WORK_ITEM_FUNCTION )(PLW_WORK_ITEM pWorkItem, PVOID pContext)
 Work item function. More...
 

Enumerations

enum  LW_TASK_EVENT_MASK {
  LW_TASK_EVENT_COMPLETE,
  LW_TASK_EVENT_INIT,
  LW_TASK_EVENT_EXPLICIT,
  LW_TASK_EVENT_CANCEL,
  LW_TASK_EVENT_TIME,
  LW_TASK_EVENT_FD_READABLE,
  LW_TASK_EVENT_FD_WRITABLE,
  LW_TASK_EVENT_FD_EXCEPTION,
  LW_TASK_EVENT_YIELD,
  LW_TASK_EVENT_UNIX_SIGNAL
}
 Event mask. More...
 
enum  LW_SCHEDULE_FLAGS { LW_SCHEDULE_HIGH_PRIORITY }
 Scheduling flags. More...
 
enum  LW_THREAD_POOL_OPTION {
  LW_THREAD_POOL_OPTION_DELEGATE_TASKS,
  LW_THREAD_POOL_OPTION_TASK_THREADS,
  LW_THREAD_POOL_OPTION_WORK_THREADS,
  LW_THREAD_POOL_OPTION_TASK_THREAD_STACK_SIZE,
  LW_THREAD_POOL_OPTION_WORK_THREAD_STACK_SIZE,
  LW_THREAD_POOL_OPTION_WORK_THREAD_TIMEOUT
}
 Thread pool option. More...
 

Functions

LW_NTSTATUS LwRtlCreateTask (LW_IN PLW_THREAD_POOL pPool, LW_OUT PLW_TASK *ppTask, LW_IN LW_OPTIONAL PLW_TASK_GROUP pGroup, LW_IN LW_TASK_FUNCTION pfnFunc, LW_IN LW_PVOID pContext)
 Create a new task. More...
 
LW_NTSTATUS LwRtlCreateTaskGroup (LW_IN PLW_THREAD_POOL pPool, LW_OUT PLW_TASK_GROUP *ppGroup)
 Create a new task group. More...
 
LW_VOID LwRtlReleaseTask (LW_IN LW_OUT PLW_TASK *ppTask)
 Release task. More...
 
LW_VOID LwRtlFreeTaskGroup (LW_IN LW_OUT PLW_TASK_GROUP *ppGroup)
 Free task group. More...
 
LW_NTSTATUS LwRtlSetTaskFd (LW_IN PLW_TASK pTask, LW_IN int Fd, LW_IN LW_TASK_EVENT_MASK Mask)
 Configure file descriptor for wakeup events. More...
 
LW_NTSTATUS LwRtlQueryTaskFd (LW_IN PLW_TASK pTask, LW_IN int Fd, LW_OUT PLW_TASK_EVENT_MASK pMask)
 Query file descriptor trigger mask. More...
 
LW_NTSTATUS LwRtlSetTaskUnixSignal (LW_IN PLW_TASK pTask, LW_IN int Sig, LW_IN LW_BOOLEAN bSubscribe)
 Configure UNIX signal wakeup events. More...
 
LW_BOOLEAN LwRtlNextTaskUnixSignal (LW_IN PLW_TASK pTask, LW_OUT siginfo_t *pInfo)
 Get next UNIX signal delivered to task. More...
 
LW_VOID LwRtlWakeTask (LW_IN PLW_TASK pTask)
 Manually wake task. More...
 
LW_VOID LwRtlCancelTask (LW_IN PLW_TASK pTask)
 Cancel task. More...
 
LW_VOID LwRtlWaitTask (LW_IN PLW_TASK pTask)
 Wait for task completion. More...
 
LW_VOID LwRtlWakeTaskGroup (LW_IN PLW_TASK_GROUP pGroup)
 Wake task group. More...
 
LW_VOID LwRtlCancelTaskGroup (LW_IN PLW_TASK_GROUP pGroup)
 Cancel task group. More...
 
LW_VOID LwRtlWaitTaskGroup (LW_IN PLW_TASK_GROUP pGroup)
 Wait for task group to complete. More...
 
LW_NTSTATUS LwRtlCreateWorkItem (LW_IN PLW_THREAD_POOL pPool, LW_OUT PLW_WORK_ITEM *ppWorkItem, LW_IN LW_WORK_ITEM_FUNCTION pfnFunc, LW_IN PVOID pContext)
 Create work item. More...
 
LW_VOID LwRtlFreeWorkItem (LW_IN LW_OUT PLW_WORK_ITEM *ppWorkItem)
 Free work item. More...
 
LW_VOID LwRtlScheduleWorkItem (LW_IN PLW_WORK_ITEM pWorkItem, LW_IN LW_SCHEDULE_FLAGS Flags)
 Schedule blocking work item. More...
 
LW_VOID LwRtlWaitWorkItems (LW_IN PLW_THREAD_POOL pPool)
 Wait for scheduled work items to complete. More...
 
LW_NTSTATUS LwRtlCreateThreadPoolAttributes (LW_OUT PLW_THREAD_POOL_ATTRIBUTES *ppAttrs)
 Create thread pool attributes structure. More...
 
LW_NTSTATUS LwRtlSetThreadPoolAttribute (LW_IN LW_OUT PLW_THREAD_POOL_ATTRIBUTES pAttrs, LW_IN LW_THREAD_POOL_OPTION Option,...)
 Set thread pool attribute. More...
 
VOID LwRtlFreeThreadPoolAttributes (LW_IN LW_OUT PLW_THREAD_POOL_ATTRIBUTES *ppAttrs)
 Free thread pool attributes. More...
 
LW_NTSTATUS LwRtlCreateThreadPool (LW_OUT PLW_THREAD_POOL *ppPool, LW_IN LW_OPTIONAL PLW_THREAD_POOL_ATTRIBUTES pAttrs)
 Create new thread pool. More...
 
LW_VOID LwRtlFreeThreadPool (LW_IN LW_OUT PLW_THREAD_POOL *ppPool)
 Free thread pool. More...
 
LW_NTSTATUS LwRtlMain (LW_VOID)
 Main signal loop. More...
 
LW_VOID LwRtlExitMain (LW_NTSTATUS Status)
 Exit main loop. More...
 
LW_NTSTATUS LwRtlBlockSignals (VOID)
 Block all signals in the current thread. More...