在调度队列中使用dispatch_semaphore_wait时线程饥饿?

时间:2012-01-05 13:45:23

标签: objective-c grand-central-dispatch

如果我在调度队列中使用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 :(得分:0)

据我所知,你的假设是正确的。 dispatch_semaphore_wait的调用阻塞了执行线程。我在类似的情况下遇到了这个问题并且发现,每个核心的并发队列两个线程创建(以及每个优先级)。我不是百分之百确定是否是2 * cpu核心或1 * cpu核心,但并发队列的线程数量是有限的。