6

Has every thread an associated dispatch queue by default? I'm just wondering if I could use dispatch_semaphores in every context, or if i need to wrap it in an explicit dispatch call with a defined queue.

4

1 に答える 1

7

それはあなたの質問が示唆するようには実際には機能しません。デフォルトでは、メインスレッドに関連付けられたメインディスパッチキューと、同時実行される3つのグローバルキュー(それぞれ高、デフォルト、低優先度)があります。

並行キューは、特定のスレッドに関連付けられるのではなく、独自のスレッドリソースを管理します。

実際、それはmanページで非常に具体的に言っていますdispatch_queue_create()

「キューは特定の実行スレッドにバインドされておらず、独立したキューに送信されたブロックは同時に実行される可能性があります。」</ p>

ディスパッチキューの外でディスパッチセマフォを使用できるかどうか(質問の他の部分)に関しては、答えは「はい」です。これらはマッハセマフォの上に実装されており、どこでも機能するはずです。あなたはここでコードを見ることができます:

http://opensource.apple.com/source/libdispatch/libdispatch-84.5.5/src/semaphore.c

于 2011-04-08T13:30:55.387 に答える