[libdispatch-dev] Using libdispatch/GCD in a real-time context

Mark Heily mark at heily.com
Mon May 17 19:37:55 PDT 2010

On 05/17/2010 05:20 AM, Stéphane Letz wrote:
 > What would be the different steps to follow to add realtime support to 
libdispatch then ?

I would start by filing an RFE bug to the libdispatch tracker, since this is 
a complex request that may take some time to implement. Here's the link:


The dispatch_queue_create() function and the dispatch_queue_attr struct 
could be extended to specify a realtime queue [1]. The 
pthread_workqueue_attr struct could be extended to support a 
time_constraint_policy for the worker threads [2]. Each realtime 
dispatch_queue would use a separate pthread_workqueue whose threads would 
run with the desired time_constraint_policy.

For additional context, take a look at the pthread_workqueue code I pulled 
from the xnu and darwin sources:



  - Mark


typedef struct dispatch_queue_attr {
     int thread_policy;
     struct thread_time_constraint_policy ttcpolicy;
} dispatch_queue_attr_t;

dispatch_queue_attr_t attr = {
	.ttcpolicy = {
		.period = ?,
		.computation = ?,
		.constraint = ?,
		.preemptible = 1,

my_queue = dispatch_queue_create("org.jack.realtime.audio", &attr);

typedef struct {
         uint32_t sig;
         int queueprio;
         int overcommit;
+	int thread_policy;
+	struct thread_time_constraint_policy *ttcpolicy;
         unsigned int resv2[13];
} pthread_workqueue_attr_t;

+int pthread_workqueue_attr_settimeconstraintpolicy_np(
+	pthread_workqueue_attr_t * attr,
+	struct thread_time_constraint_policy *ttcpolicy);

More information about the libdispatch-dev mailing list