+#ifdef __BLOCKS__
+/*!
+ * @function dispatch_pthread_root_queue_create
+ *
+ * @abstract
+ * Creates a new concurrent dispatch root queue with a pthread-based pool of
+ * worker threads owned by the application.
+ *
+ * @discussion
+ * Dispatch pthread root queues are similar to the global concurrent dispatch
+ * queues in that they invoke blocks concurrently, however the blocks are not
+ * executed on ordinary worker threads but use a dedicated pool of pthreads not
+ * shared with the global queues or any other pthread root queues.
+ *
+ * NOTE: this is a special-purpose facility that should only be used in very
+ * limited circumstances, in almost all cases the global concurrent queues
+ * should be preferred. While this facility allows for more flexibility in
+ * configuring worker threads for special needs it comes at the cost of
+ * increased overall memory usage due to reduced thread sharing and higher
+ * latency in worker thread bringup.
+ *
+ * Dispatch pthread root queues do not support suspension, application context
+ * and change of width or of target queue. They can however be used as the
+ * target queue for serial or concurrent queues obtained via
+ * dispatch_queue_create() or dispatch_queue_create_with_target(), which
+ * enables the blocks submitted to those queues to be processed on the root
+ * queue's pthread pool.
+ *
+ * When a dispatch pthread root queue is no longer needed, it should be
+ * released with dispatch_release(). Existing worker pthreads and pending blocks
+ * submitted to the root queue will hold a reference to the queue so it will not
+ * be deallocated until all blocks have finished and worker threads exited.
+ *
+ * @param label
+ * A string label to attach to the queue.
+ * This parameter is optional and may be NULL.
+ *
+ * @param flags
+ * Reserved for future use. Passing any value other than zero may result in
+ * a NULL return value.
+ *
+ * @param attr
+ * Attributes passed to pthread_create(3) when creating worker pthreads. This
+ * parameter is copied and can be destroyed after this call returns.
+ * This parameter is optional and may be NULL.
+ *
+ * @param configure
+ * Configuration block called on newly created worker pthreads before any blocks
+ * for the root queue are executed. The block may configure the current thread
+ * as needed.
+ * This parameter is optional and may be NULL.
+ *
+ * @result
+ * The newly created dispatch pthread root queue.
+ */
+__OSX_AVAILABLE_STARTING(__MAC_10_9,__IPHONE_6_0)
+DISPATCH_EXPORT DISPATCH_MALLOC DISPATCH_RETURNS_RETAINED DISPATCH_WARN_RESULT
+DISPATCH_NOTHROW
+dispatch_queue_t
+dispatch_pthread_root_queue_create(const char *label, unsigned long flags,
+ const pthread_attr_t *attr, dispatch_block_t configure);
+#endif /* __BLOCKS__ */
+
+/*!
+ * @constant DISPATCH_APPLY_CURRENT_ROOT_QUEUE
+ * @discussion Constant to pass to the dispatch_apply() and dispatch_apply_f()
+ * functions to indicate that the root queue for the current thread should be
+ * used (i.e. one of the global concurrent queues or a queue created with
+ * dispatch_pthread_root_queue_create()). If there is no such queue, the
+ * default priority global concurrent queue will be used.
+ */
+#define DISPATCH_APPLY_CURRENT_ROOT_QUEUE NULL