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*
@@ -158,7 +161,10 @@ struct dispatch_root_queue_context_s {
158161 int volatile dgq_pending ;
159162#if DISPATCH_USE_WORKQUEUES
160163 qos_class_t dgq_qos ;
161- int dgq_wq_priority , dgq_wq_options ;
164+ #if DISPATCH_USE_WORKQ_PRIORITY
165+ int dgq_wq_priority ;
166+ #endif
167+ int dgq_wq_options ;
162168#if DISPATCH_USE_LEGACY_WORKQUEUE_FALLBACK || DISPATCH_USE_PTHREAD_POOL
163169 pthread_workqueue_t dgq_kworkqueue ;
164170#endif
@@ -186,7 +192,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
186192 [DISPATCH_ROOT_QUEUE_IDX_MAINTENANCE_QOS ] = {{{
187193#if DISPATCH_USE_WORKQUEUES
188194 .dgq_qos = QOS_CLASS_MAINTENANCE ,
195+ #if DISPATCH_USE_WORKQ_PRIORITY
189196 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE ,
197+ #endif
190198 .dgq_wq_options = 0 ,
191199#endif
192200#if DISPATCH_ENABLE_THREAD_POOL
@@ -197,7 +205,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
197205 [DISPATCH_ROOT_QUEUE_IDX_MAINTENANCE_QOS_OVERCOMMIT ] = {{{
198206#if DISPATCH_USE_WORKQUEUES
199207 .dgq_qos = QOS_CLASS_MAINTENANCE ,
208+ #if DISPATCH_USE_WORKQ_PRIORITY
200209 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE ,
210+ #endif
201211 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
202212#endif
203213#if DISPATCH_ENABLE_THREAD_POOL
@@ -208,7 +218,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
208218 [DISPATCH_ROOT_QUEUE_IDX_BACKGROUND_QOS ] = {{{
209219#if DISPATCH_USE_WORKQUEUES
210220 .dgq_qos = QOS_CLASS_BACKGROUND ,
221+ #if DISPATCH_USE_WORKQ_PRIORITY
211222 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE_CONDITIONAL ,
223+ #endif
212224 .dgq_wq_options = 0 ,
213225#endif
214226#if DISPATCH_ENABLE_THREAD_POOL
@@ -219,7 +231,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
219231 [DISPATCH_ROOT_QUEUE_IDX_BACKGROUND_QOS_OVERCOMMIT ] = {{{
220232#if DISPATCH_USE_WORKQUEUES
221233 .dgq_qos = QOS_CLASS_BACKGROUND ,
234+ #if DISPATCH_USE_WORKQ_PRIORITY
222235 .dgq_wq_priority = WORKQ_BG_PRIOQUEUE_CONDITIONAL ,
236+ #endif
223237 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
224238#endif
225239#if DISPATCH_ENABLE_THREAD_POOL
@@ -230,7 +244,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
230244 [DISPATCH_ROOT_QUEUE_IDX_UTILITY_QOS ] = {{{
231245#if DISPATCH_USE_WORKQUEUES
232246 .dgq_qos = QOS_CLASS_UTILITY ,
247+ #if DISPATCH_USE_WORKQ_PRIORITY
233248 .dgq_wq_priority = WORKQ_LOW_PRIOQUEUE ,
249+ #endif
234250 .dgq_wq_options = 0 ,
235251#endif
236252#if DISPATCH_ENABLE_THREAD_POOL
@@ -241,7 +257,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
241257 [DISPATCH_ROOT_QUEUE_IDX_UTILITY_QOS_OVERCOMMIT ] = {{{
242258#if DISPATCH_USE_WORKQUEUES
243259 .dgq_qos = QOS_CLASS_UTILITY ,
260+ #if DISPATCH_USE_WORKQ_PRIORITY
244261 .dgq_wq_priority = WORKQ_LOW_PRIOQUEUE ,
262+ #endif
245263 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
246264#endif
247265#if DISPATCH_ENABLE_THREAD_POOL
@@ -252,7 +270,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
252270 [DISPATCH_ROOT_QUEUE_IDX_DEFAULT_QOS ] = {{{
253271#if DISPATCH_USE_WORKQUEUES
254272 .dgq_qos = QOS_CLASS_DEFAULT ,
273+ #if DISPATCH_USE_WORKQ_PRIORITY
255274 .dgq_wq_priority = WORKQ_DEFAULT_PRIOQUEUE ,
275+ #endif
256276 .dgq_wq_options = 0 ,
257277#endif
258278#if DISPATCH_ENABLE_THREAD_POOL
@@ -263,7 +283,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
263283 [DISPATCH_ROOT_QUEUE_IDX_DEFAULT_QOS_OVERCOMMIT ] = {{{
264284#if DISPATCH_USE_WORKQUEUES
265285 .dgq_qos = QOS_CLASS_DEFAULT ,
286+ #if DISPATCH_USE_WORKQ_PRIORITY
266287 .dgq_wq_priority = WORKQ_DEFAULT_PRIOQUEUE ,
288+ #endif
267289 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
268290#endif
269291#if DISPATCH_ENABLE_THREAD_POOL
@@ -274,7 +296,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
274296 [DISPATCH_ROOT_QUEUE_IDX_USER_INITIATED_QOS ] = {{{
275297#if DISPATCH_USE_WORKQUEUES
276298 .dgq_qos = QOS_CLASS_USER_INITIATED ,
299+ #if DISPATCH_USE_WORKQ_PRIORITY
277300 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE ,
301+ #endif
278302 .dgq_wq_options = 0 ,
279303#endif
280304#if DISPATCH_ENABLE_THREAD_POOL
@@ -285,7 +309,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
285309 [DISPATCH_ROOT_QUEUE_IDX_USER_INITIATED_QOS_OVERCOMMIT ] = {{{
286310#if DISPATCH_USE_WORKQUEUES
287311 .dgq_qos = QOS_CLASS_USER_INITIATED ,
312+ #if DISPATCH_USE_WORKQ_PRIORITY
288313 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE ,
314+ #endif
289315 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
290316#endif
291317#if DISPATCH_ENABLE_THREAD_POOL
@@ -296,7 +322,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
296322 [DISPATCH_ROOT_QUEUE_IDX_USER_INTERACTIVE_QOS ] = {{{
297323#if DISPATCH_USE_WORKQUEUES
298324 .dgq_qos = QOS_CLASS_USER_INTERACTIVE ,
325+ #if DISPATCH_USE_WORKQ_PRIORITY
299326 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE_CONDITIONAL ,
327+ #endif
300328 .dgq_wq_options = 0 ,
301329#endif
302330#if DISPATCH_ENABLE_THREAD_POOL
@@ -307,7 +335,9 @@ static struct dispatch_root_queue_context_s _dispatch_root_queue_contexts[] = {
307335 [DISPATCH_ROOT_QUEUE_IDX_USER_INTERACTIVE_QOS_OVERCOMMIT ] = {{{
308336#if DISPATCH_USE_WORKQUEUES
309337 .dgq_qos = QOS_CLASS_USER_INTERACTIVE ,
338+ #if DISPATCH_USE_WORKQ_PRIORITY
310339 .dgq_wq_priority = WORKQ_HIGH_PRIOQUEUE_CONDITIONAL ,
340+ #endif
311341 .dgq_wq_options = WORKQ_ADDTHREADS_OPTION_OVERCOMMIT ,
312342#endif
313343#if DISPATCH_ENABLE_THREAD_POOL
@@ -5809,7 +5839,7 @@ _dispatch_worker_thread(void *context)
58095839 bool manager = (dq == & _dispatch_mgr_root_queue );
58105840 bool monitored = !(overcommit || manager );
58115841 if (monitored ) {
5812- _dispatch_workq_worker_register (dq , qc -> dgq_wq_priority );
5842+ _dispatch_workq_worker_register (dq , qc -> dgq_qos );
58135843 }
58145844#endif
58155845
@@ -5823,7 +5853,7 @@ _dispatch_worker_thread(void *context)
58235853
58245854#if DISPATCH_USE_INTERNAL_WORKQUEUE
58255855 if (monitored ) {
5826- _dispatch_workq_worker_unregister (dq , qc -> dgq_wq_priority );
5856+ _dispatch_workq_worker_unregister (dq , qc -> dgq_qos );
58275857 }
58285858#endif
58295859 (void )os_atomic_inc2o (qc , dgq_thread_pool_size , release );
0 commit comments