2011-07-06 2 views
7

두 개의 연속 대기열 A &을 만들고 싶습니다. B. 대기열 B가 대기열 A의 대상인 경우 B를 대기열에 넣고 실행 준비가 끝날 때까지 대기시키고 싶습니다. 그러나 계속 진행하고 싶습니다. 대기열 A의 블록 실행.디스패치 큐 일시 중단이 대상 큐를 일시 중단합니까?

B를 일시 중단하면 대상 대기열 (대기열 A)도 일시 중단됩니까?

내 생각에 나중에 (지정되지 않은) 날짜에 이러한 특정 블록 (큐 B)을 예약하고 싶지만 이들이 동시에 실행되는 것을 원하지 않습니다 (코어 데이터^_^포함). 나는 세마포어를 다루고 싶지 않다. 하지만 B는 여기에 명확하지 않았다 경우

를 일시 중단 된 동안 대기열 A는, 그것의 블록 처리를 계속하려는 것은

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); 

queueB가 중단되고 일부 샘플 코드를하지만 queueA이 중단되지 않습니다.

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

queueA 및 queueB가 일시 중단되었습니다.