Has every thread an associated dispatch queue by default? I'm just wondering if I could use dispatch_semaphore
s in every context, or if i need to wrap it in an explicit dispatch call with a defined queue.
質問する
1386 次
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 に答える