2011-07-06 48 views
7

我想創建兩個串行隊列A & B.其中隊列B是隊列A的目標。我想排隊B上的一些塊,並暫停它,直到我準備好執行它們,但是我想繼續執行隊列A上的塊。暫停調度隊列暫停其目標隊列嗎?

如果我暫停B,這是否也暫停它的目標隊列(隊列A)?

我的想法是,我想安排這些特定塊(在隊列B)在稍後(未指定)日期執行,但我不希望它們同時運行(這涉及核心數據^ _ ^)和我不想處理信號量。但我想隊列中繼續處理它的塊,而B暫停

在說不清楚這裏的情況下是一些示例代碼

dispatch_queue_t queueA = dispatch_queue_create("app.queue.A"); 
dispatch_queue_t queueB = dispatch_queue_create("app.queue.B"); 

dispatch_set_target_queue(queueB, queueA); 

dispatch_suspend(queueB); 
/* 
* Add a bunch of blocks to queue B or A 
* Where the ones added to A should execute immediately 
*/ 


//Wait till blocks on queue A have finished and start up B 
dispatch_resume(queueB); 

dispatch_release(queueA); 
dispatch_release(queueB); 

回答

12
dispatch_set_target_queue(queueB, queueA); 
dispatch_suspend(queueB); 

等級隊列B被暫停,但queueA不暫停。

dispatch_set_target_queue(queueB, queueA); 
dispatch_suspend(queueA); 

queueA和queueB被掛起。