Поток потока при использовании dispatch_semaphore_wait внутри очереди отправки? - PullRequest
2 голосов
/ 05 января 2012

Если я использую dispatch_semaphore_wait внутри очереди отправки, может ли это привести к истощению моей очереди отправки потоков, если многие потоки заблокированы на dispatch_semaphore_wait?

parallelDownloadsSemaphore = dispatch_semaphore_create(4);

[...]

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
    dispatch_semaphore_wait([self parallelDownloadsSemaphore], DISPATCH_TIME_FOREVER);
    // perform lengthy download
    dispatch_semaphore_signal([self parallelDownloadsSemaphore]);
});

1 Ответ

0 голосов
/ 21 марта 2012

Ваше предположение, насколько я знаю, верно. Вызов dispatch_semaphore_wait блокирует исполняющий поток. Я столкнулся с этой проблемой в аналогичной ситуации и выяснил, что параллельная очередь создает два потока для каждого ядра (и для каждого приоритета). Я не уверен на сто процентов, было ли 2 * ядра процессора или 1 * ядра процессора, но количество потоков для параллельной очереди ограничено.

...