2016-10-20 4 views
0

나는 GCD 장벽에 대해 조금 배우고 (Apple docs)에서이 정보를 검토하고 싶었 : 장벽 블록 이후에 제출새로운 작업

모든 블록 장벽 블록까지 실행되지 않습니다 완료됩니다. 이 코드에 의해

:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 
for (int i = 0; i < 500, i++) { 
    dispatch_async(queue, ^{ 
    NSLog("%d", i); 
    } 
    if ((i % 50) == 0) { 
    dispatch_barrier_async(queue, ^{ 
     for (int j = 0; j < 5; j++) { 
     [NSThread sleepForTimeInterval:1]; 
     NSLog(@"Barrier!"); 
     } 
    }); 
    } 
} 

내가 각각 50 카운트, 큐가 5 초 동안 정지되지만, 그렇지 않은 것을 예상하고 있었다. 대신 장벽은 다른 작업과 병행하여 실행되며 장벽에도 불구하고 모든 작업이 즉각 실행됩니다. 문서가 잘못되었거나 오인을 오해 한 적이 있습니까? 미리 감사

+2

역할을하지 않습니다'큐 = dispatch_queue_create ("SomeName", DISPATCH_QUEUE_CONCURRENT을); ' ? – rmaddy

답변

2

에 당신이 당신 자신이 dispatch_queue_create 기능을 사용하여 를 작성하는 워드 프로세서

당신이 동시 큐를해야 지정하는 큐의 다음 단락을 오해 된 것 같다. 이이 기능으로 전달하는 대기열이 연속 대기열이거나 동시 대기열 중 하나 인 경우이 함수는 dispatch_async 함수처럼 작동합니다.

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0); 

장벽 대신 사용하여 큐를 생성하면 어떻게됩니까 정상 dispatch_async

관련 문제