2013-05-18 10 views
5

は私が順番にdispatch_async() 3回を呼び出すとしますメインのGrand Central Dispatchキューはシリアルまたはコンカレントですか?

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doOne]; 
}); 

// some code here 

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doTwo]; 
}); 

// more code here 

dispatch_async(dispatch_get_main_queue(), 
     ^{ 
      [self doThree]; 
}); 

は、これは常に、その後

[self doOne][self doTwo][self doThree]と同様に実行、または順序が保証されていることでしょうか?

この場合、メインキューがシリアルまたはコンカレントであるかどうかが疑問です。ドキュメントから

答えて

13

dispatch_get_main_queue

は、アプリケーションの メインスレッドに関連付けられているシリアルディスパッチキューを返します。

ので、メインキューは[self doThree]がこの順に順次実行されるシリアルキュー、および[self doOne][self doTwo]、です。

+2

また、ブロックが同じスレッドで実行されるため、シリアルにする必要があります。 1つのスレッドが複数のブロックを同時に実行できる方法はありません。 – Sven

+1

@Robはい、メインキューにサブミットされたブロックはメインスレッドで実行されます。それがメインキューの全体のポイントです。キューはブロックを実行しません。ブロックは常にスレッドによって発生します。通常はGCDが管理するプライベートスレッドですが、メインキューのメインスレッドです。 – Sven

+0

@Svenあなたは私を誤解しました。私の要点は、これがメインキューに当てはまることを明確にすることであり、一般的なキューには適用されません。 – Rob

関連する問題