Provided by: libpthread-workqueue-dev_0.9.1-1_amd64 bug


     pthread_workqueue_init_np, pthread_workqueue_create_np, pthread_workqueue_additem_np —
     thread workqueue operations

     pthread_workqueue_attr_init_np, pthread_workqueue_attr_destroy_np,
     pthread_workqueue_attr_getovercommit_np, pthread_workqueue_attr_setovercommit_np,
     pthread_workqueue_attr_getqueuepriority_np, pthread_workqueue_attr_setqueuepriority_np —
     thread workqueue attribute operations


     #include <pthread_workqueue.h>


     pthread_workqueue_create_np(pthread_workqueue_t *workqp,
         const pthread_workqueue_attr_t * attr);

     pthread_workqueue_additem_np(pthread_workqueue_t workq, void ( *workitem_func)(void *),
         void * workitem_arg, pthread_workitem_handle_t * itemhandlep, unsigned int *gencountp);

     pthread_workqueue_attr_init_np(pthread_workqueue_attr_t *attr);

     pthread_workqueue_attr_destroy_np(pthread_workqueue_attr_t *attr);

     pthread_workqueue_attr_getovercommit_np(pthread_workqueue_attr_t *attr, int *ocommp);

     pthread_workqueue_attr_setovercommit_np(pthread_workqueue_attr_t *attr, int ocomm);

     pthread_workqueue_attr_getqueuepriority_np(pthread_workqueue_attr_t *attr, int *qpriop);

     pthread_workqueue_attr_setqueuepriority_np(pthread_workqueue_attr_t *attr, int qprio);


     The pthread_workqueue_*_np() functions are used to create and submit work items to a thread

     The user may create multiple work queues of different priority and manually overcommit the
     available resources.

     pthread_workqueue_init_np() allocates and initializes the thread workqueue subsystem.

     pthread_workqueue_create_np() creates a new thread workqueue with the attributes given by
     attr.  If attr is NULL then the default attributes are used.  A workqueue handle is returned
     in the workqp parameter.

     Thread workqueue attributes are used to specify parameters to pthread_workqueue_create_np().
     One attribute object can be used in multiple calls to pthread_workqueue_create_np(), with or
     without modifications between calls.

     pthread_workqueue_additem_np() is used to submit work items to the thread pool specified by
     workq parameter.  The work item function and function argument are given by workitem_func
     and workitem_arg.  The work item handle is returned in itemhandlep.

     The pthread_workqueue_attr_init_np() function initializes attr with all the default thread
     workqueue attributes.

     The pthread_workqueue_attr_destroy_np() function destroys attr.

     The pthread_workqueue_attr_set*_np() functions set the attribute that corresponds to each
     function name.  pthread_workqueue_attr_setovercommit_np() can be used to set the overcommit
     flag.  If the overcommit flag is set then more threads will be started, if needed, which may
     overcommit the physical resources of the system.
     pthread_workqueue_attr_setqueuepriority_np() sets the queue priority attribute of the thread
     work queue and must be set to one of the following values:

     WORKQ_HIGH_PRIOQUEUE        Work items in the queue with this attribute will be given higher
                                 priority by the thread scheduler.

     WORKQ_DEFAULT_PRIOQUEUE     Work items in the queue with this attribute are given the
                                 default priority.

     WORKQ_LOW_PRIOQUEUE         Work items in the queue with this attribute will be given lower
                                 priority by the thread scheduler.

     The pthread_workqueue_attr_get*_np() functions copy the value of the attribute that
     corresponds to each function name to the location pointed to by the second function


     If successful, these functions return 0.  Otherwise, an error number is returned to indicate
     the error.


     The pthread_workqueue_init_np() function will fail if:

     [ENOMEM]           Out of memory.

     The pthread_workqueue_create_np() function will fail if:

     [ENOMEM]           Out of memory.

     The pthread_workqueue_additem_np() function will fail if:

     [EINVAL]           Invalid workqueue handle.

     [ENOMEM]           Out of memory.

     [ESRCH]            Can not find workqueue.

     The pthread_workqueue_attr_init_np() function will fail if:

     [ENOMEM]           Out of memory.

     The pthread_workqueue_attr_destroy_np() function will fail if:

     [EINVAL]           Invalid value for attr.

     The pthread_workqueue_attr_setqueuepriority_np() function will fail if:

     [EINVAL]           Invalid value for attr or for qprio.

     The pthread_workqueue_attr_setovercommit_np(), pthread_workqueue_attr_getovercommit_np() and
     pthread_workqueue_attr_getqueuepriority_np() functions will fail if:

     [EINVAL]           Invalid value for attr.


     pthread(3), sysctl(3)


     There is no way, currently, to remove or destory work queues and pending work items other
     than exiting the process.

     All worker threads run at the same thread priority; however, items placed on high-priority
     workqueues will be executed before those on lower-priority workqueues.


     This thread workqueues code was created to support Grand Central Dispatch (GCD or
     libdispatch) and first appeared in FreeBSD 8.0.


     Mark Heily <>.

     Based on earlier work by
     Stacey Son <> and
     Apple, Inc.