3737 !defined(DISPATCH_USE_LEGACY_WORKQUEUE_FALLBACK )
3838#define DISPATCH_USE_LEGACY_WORKQUEUE_FALLBACK 1
3939#endif
40+ #if HAVE_PTHREAD_WORKQUEUE_SETDISPATCH_NP || DISPATCH_USE_LEGACY_WORKQUEUE_FALLBACK
41+ #define DISPATCH_USE_WORKQ_PRIORITY 1
42+ #endif
4043#if DISPATCH_USE_WORKQUEUES && DISPATCH_USE_PTHREAD_POOL && \
4144 !DISPATCH_USE_LEGACY_WORKQUEUE_FALLBACK
4245#define pthread_workqueue_t void*
@@ -154,7 +157,10 @@ struct dispatch_root_queue_context_s {
154157 int volatile dgq_pending ;
155158#if DISPATCH_USE_WORKQUEUES
156159 qos_class_t dgq_qos ;
157- int dgq_wq_priority , dgq_wq_options ;
160+ #if DISPATCH_USE_WORKQ_PRIORITY
161+ int dgq_wq_priority ;
162+ #endif
163+ int dgq_wq_options ;
158164#if DISPATCH_USE_LEGACY_WORKQUEUE_FALLBACK || DISPATCH_USE_PTHREAD_POOL
159165 pthread_workqueue_t dgq_kworkqueue ;
160166#endif
@@ -182,7 +188,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
182188 [DISPATCH_ROOT_QUEUE_IDX_MAINTENANCE_QOS ] = {{{
183189#if DISPATCH_USE_WORKQUEUES
184190 .dgq_qos = QOS_CLASS_MAINTENANCE ,
191+ #if DISPATCH_USE_WORKQ_PRIORITY
185192 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE ,
193+ #endif
186194 .dgq_wq_options = 0 ,
187195#endif
188196#if DISPATCH_ENABLE_THREAD_POOL
@@ -193,7 +201,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
193201 [DISPATCH_ROOT_QUEUE_IDX_MAINTENANCE_QOS_OVERCOMMIT ] = {{{
194202#if DISPATCH_USE_WORKQUEUES
195203 .dgq_qos = QOS_CLASS_MAINTENANCE ,
204+ #if DISPATCH_USE_WORKQ_PRIORITY
196205 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE ,
206+ #endif
197207 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
198208#endif
199209#if DISPATCH_ENABLE_THREAD_POOL
@@ -204,7 +214,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
204214 [DISPATCH_ROOT_QUEUE_IDX_BACKGROUND_QOS ] = {{{
205215#if DISPATCH_USE_WORKQUEUES
206216 .dgq_qos = QOS_CLASS_BACKGROUND ,
217+ #if DISPATCH_USE_WORKQ_PRIORITY
207218 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE_CONDITIONAL ,
219+ #endif
208220 .dgq_wq_options = 0 ,
209221#endif
210222#if DISPATCH_ENABLE_THREAD_POOL
@@ -215,7 +227,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
215227 [DISPATCH_ROOT_QUEUE_IDX_BACKGROUND_QOS_OVERCOMMIT ] = {{{
216228#if DISPATCH_USE_WORKQUEUES
217229 .dgq_qos = QOS_CLASS_BACKGROUND ,
230+ #if DISPATCH_USE_WORKQ_PRIORITY
218231 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE_CONDITIONAL ,
232+ #endif
219233 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
220234#endif
221235#if DISPATCH_ENABLE_THREAD_POOL
@@ -226,7 +240,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
226240 [DISPATCH_ROOT_QUEUE_IDX_UTILITY_QOS ] = {{{
227241#if DISPATCH_USE_WORKQUEUES
228242 .dgq_qos = QOS_CLASS_UTILITY ,
243+ #if DISPATCH_USE_WORKQ_PRIORITY
229244 .dgq_wq_priority = WORKQ_LOW_PRIOQUEUE ,
245+ #endif
230246 .dgq_wq_options = 0 ,
231247#endif
232248#if DISPATCH_ENABLE_THREAD_POOL
@@ -237,7 +253,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
237253 [DISPATCH_ROOT_QUEUE_IDX_UTILITY_QOS_OVERCOMMIT ] = {{{
238254#if DISPATCH_USE_WORKQUEUES
239255 .dgq_qos = QOS_CLASS_UTILITY ,
256+ #if DISPATCH_USE_WORKQ_PRIORITY
240257 .dgq_wq_priority = WORKQ_LOW_PRIOQUEUE ,
258+ #endif
241259 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
242260#endif
243261#if DISPATCH_ENABLE_THREAD_POOL
@@ -248,7 +266,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
248266 [DISPATCH_ROOT_QUEUE_IDX_DEFAULT_QOS ] = {{{
249267#if DISPATCH_USE_WORKQUEUES
250268 .dgq_qos = QOS_CLASS_DEFAULT ,
269+ #if DISPATCH_USE_WORKQ_PRIORITY
251270 .dgq_wq_priority = WORKQ_DEFAULT_PRIOQUEUE ,
271+ #endif
252272 .dgq_wq_options = 0 ,
253273#endif
254274#if DISPATCH_ENABLE_THREAD_POOL
@@ -259,7 +279,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
259279 [DISPATCH_ROOT_QUEUE_IDX_DEFAULT_QOS_OVERCOMMIT ] = {{{
260280#if DISPATCH_USE_WORKQUEUES
261281 .dgq_qos = QOS_CLASS_DEFAULT ,
282+ #if DISPATCH_USE_WORKQ_PRIORITY
262283 .dgq_wq_priority = WORKQ_DEFAULT_PRIOQUEUE ,
284+ #endif
263285 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
264286#endif
265287#if DISPATCH_ENABLE_THREAD_POOL
@@ -270,7 +292,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
270292 [DISPATCH_ROOT_QUEUE_IDX_USER_INITIATED_QOS ] = {{{
271293#if DISPATCH_USE_WORKQUEUES
272294 .dgq_qos = QOS_CLASS_USER_INITIATED ,
295+ #if DISPATCH_USE_WORKQ_PRIORITY
273296 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE ,
297+ #endif
274298 .dgq_wq_options = 0 ,
275299#endif
276300#if DISPATCH_ENABLE_THREAD_POOL
@@ -281,7 +305,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
281305 [DISPATCH_ROOT_QUEUE_IDX_USER_INITIATED_QOS_OVERCOMMIT ] = {{{
282306#if DISPATCH_USE_WORKQUEUES
283307 .dgq_qos = QOS_CLASS_USER_INITIATED ,
308+ #if DISPATCH_USE_WORKQ_PRIORITY
284309 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE ,
310+ #endif
285311 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
286312#endif
287313#if DISPATCH_ENABLE_THREAD_POOL
@@ -292,7 +318,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
292318 [DISPATCH_ROOT_QUEUE_IDX_USER_INTERACTIVE_QOS ] = {{{
293319#if DISPATCH_USE_WORKQUEUES
294320 .dgq_qos = QOS_CLASS_USER_INTERACTIVE ,
321+ #if DISPATCH_USE_WORKQ_PRIORITY
295322 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE_CONDITIONAL ,
323+ #endif
296324 .dgq_wq_options = 0 ,
297325#endif
298326#if DISPATCH_ENABLE_THREAD_POOL
@@ -303,7 +331,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
303331 [DISPATCH_ROOT_QUEUE_IDX_USER_INTERACTIVE_QOS_OVERCOMMIT ] = {{{
304332#if DISPATCH_USE_WORKQUEUES
305333 .dgq_qos = QOS_CLASS_USER_INTERACTIVE ,
334+ #if DISPATCH_USE_WORKQ_PRIORITY
306335 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE_CONDITIONAL ,
336+ #endif
307337 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
308338#endif
309339#if DISPATCH_ENABLE_THREAD_POOL
@@ -5511,7 +5541,7 @@ _dispatch_worker_thread(void *context)
55115541 bool manager = (dq == & _dispatch_mgr_root_queue );
55125542 bool monitored = !(overcommit || manager );
55135543 if (monitored ) {
5514- _dispatch_workq_worker_register (dq , qc -> dgq_wq_priority );
5544+ _dispatch_workq_worker_register (dq , qc -> dgq_qos );
55155545 }
55165546#endif
55175547
@@ -5525,7 +5555,7 @@ _dispatch_worker_thread(void *context)
55255555
55265556#if DISPATCH_USE_INTERNAL_WORKQUEUE
55275557 if (monitored ) {
5528- _dispatch_workq_worker_unregister (dq , qc -> dgq_wq_priority );
5558+ _dispatch_workq_worker_unregister (dq , qc -> dgq_qos );
55295559 }
55305560#endif
55315561 (void )os_atomic_inc2o (qc , dgq_thread_pool_size , release );
0 commit comments