如果我在调度队列中使用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]);
});
答案 0 :(得分:0)
据我所知,你的假设是正确的。 dispatch_semaphore_wait
的调用阻塞了执行线程。我在类似的情况下遇到了这个问题并且发现,每个核心的并发队列两个线程创建(以及每个优先级)。我不是百分之百确定是否是2 * cpu核心或1 * cpu核心,但并发队列的线程数量是有限的。