1

은 내가 dispatch_queue_t과 같이 저장하는 경우 : ...dispatch_queue_t에 대한 실행을 호출하면 동일한 스레드에 있는지 확인할 수 있습니까?

@property(assign, nonatomic) dispatch_queue_t myQueue; 

나중에
_myQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 

, 그때 다른 곳

dispatch_async(_myQueue, ^{ 
    NSLog(@"Hi!"); 
}); 

dispatch_async(_myQueue, ^{ 
    NSLog(@"Hello!"); 
}); 
등의 작업을 수행 할 때

은 같은 스레드에서 실행되는 이러한 블록입니까? 그렇지 않다면 어떻게 그걸 확인해야합니까? 기본적으로 스레드에 대한 참조를 유지하고 해당 스레드에서만 일부 작업을 실행하려고합니다.

답변

5

대기열에 스레드를 할당하는 방법은 Grand Central Dispatch의 구현 세부 사항입니다. (직렬 또는 동시) 대기열에 발송 된 두 개의 블록이 동일한 스레드에서 반드시 실행되는 것은 아닙니다. 유일한 예외는 주 스레드에서만 실행되는 "주 큐"입니다.

코드가 동일한 스레드에서 실행되어야한다는 요구 사항이있는 경우 과 같은 다른 스레딩 방법을 사용해야합니다. NSThread 또는 pthread_create.

+0

이 점과 직렬 스레드와 동시 스레드의 차이점을 알기 위해 어디에서 설명서를 참조해야합니까? 나는 C에서 가장 간단한 GCD 메서드와 스레딩에 대해서만 노출했다. –

+0

@NickC : [ "Concurrency Programming Guide"] (https://developer.apple.com/library/ios/DOCUMENTATION/General/Conceptual/ConcurrencyProgrammingGuide/ 소개/Introduction.html), [ "Threading Programming Guide"] (https://developer.apple.com/library/ios/DOCUMENTATION/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html#//apple_ref/doc/uid/10000057i). –

+0

마지막으로 한 가지 - global_queue의 dispatch_async에 블록을 보냅니다 - 같은 스레드에서 실행되는 전체 메서드입니까? –

관련 문제