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