2014-06-11 1 views

답변

3

대기열을 "점프"하는 공용 API가 없으며 대기열에서 이전에 대기열에 있지만 아직 실행되지 않은 대기열을 제거하거나 순서를 바꾸지 않습니다. 블록을 다른 블록보다 높은 우선 순위로 실행하기를 원하면 높은 우선 순위의 전역 동시 대기열에이를 제출할 수 있지만, 당연히 특정 대기열을 사용하여 제공되는 동시성 보장이 손실됩니다. 그 이상으로,이 기능을 직접 구현해야합니다.

이렇게하는 방법 중 하나는 dispatch_async 주위에 "큐 점핑"블록이 대기열 건너 뛰지 않은 모든 블록보다 먼저 실행될 수있는 다른 블록을 래핑하는 자체 래퍼를 사용하는 것일 수 있습니다. "래퍼 블록"이 일시 중단하고 그에 따라 재개 할 수있는 "점퍼"에 대해 두 번째 직렬 대기열을 만드는 것을 상상할 수 있습니다.

그러나 일반적으로 제출되면 GCD 대기열의 블록을 재정렬 할 수있는 방법이 없습니다.

2

여러 개의 상호 연관된 대기열과 비슷한 것을 구현하는 데 사용할 수있는 대상 대기열과 일시 중단을 사용하는 기술이 있습니다.

WWDC 2011 세션 인 "Mastering Grand Central Dispatch"에서는이 중 하나를 자세히 설명했습니다.