25

OK、私はGrand Central Dispatchが大好きで、比較的成功して使用した後ですが、これは私が完全には理解していないことです。

を使用して独自のシリアルキューを作成したとします。

dispatch_queue_t myQueue;
myQueue = dispatch_queue_create("myQueue", NULL);

その後、私はこれを行います:

dispatch_async(myQueue, ^{
  [self doStuff1];
});

// and a few lines later...

dispatch_sync(myQueue, ^{
  [self doStuff2];
});

最初のディスパッチは非同期です。それで、それは同時に行われますよね?myQueueがシリアルの場合、どうすればよいでしょうか。シリアルキューはどのようにして並行して、またはもしそうなら、順不同で物事を行うことができますか?

ありがとう

4

3 に答える 3

4

ブロックがキューに入れられる方法を変更しないdispatch_asyncか、変更します。dispatch_syncキューがシリアルの場合、ブロックはシリアルに実行されます。キューがコンカレントの場合は、同時に実行されます。

2 つの重要な違いはdispatch_sync、ブロックをキューに入れ、そのブロックが実行されるまで現在の実行スレッドで待機し、dispatch_async単にブロックをキューに入れ、後続の命令の実行を継続することです。

于 2016-04-28T14:45:52.733 に答える