1

次のように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!");
});

これらのブロックは同じスレッドで実行されますか? そうでない場合、どうすればそれらがそうであることを確認できますか? 基本的に、スレッドへの参照を保持し、そのスレッドでのみいくつかのアクションを実行させたいと考えています。

4

1 に答える 1

5

スレッドをキューに割り当てる方法は、Grand Central Dispatch の実装の詳細です。(シリアルまたは同時) キューにディスパッチされた 2 つのブロックは、必ずしも同じスレッドで実行されるとは限りません。唯一の例外は、メイン スレッドでのみ実行される「メイン キュー」です。

コードを同じスレッドで実行する必要がある場合は、別のスレッド化方法を使用する必要がありNSThreadますpthread_create

于 2013-09-01T19:33:28.353 に答える