2
如果我在调度队列中使用dispatch_semaphore_wait
,如果多个线程在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]);
});
所以你说,被阻塞的线程不会返回到线程池,因此如果有很多线程被阻塞的话,线程用尽的风险相当大。一般来说,标准队列中每个CPU核心只有一个线程可用?有没有人有文档的参考来支持这个? – Twilite 2012-03-22 09:35:06
随着线程的阻塞,我很确定,你应该总是避免这种情况。每个并发队列的线程数量在某种程度上局限于CPU的数量,这只是我做过的一个观察。但是,我对此并不十分确定。我试图找到一些参考。 – 2012-03-22 09:44:19