NSCondition とセマフォ (c API から) の違いを理解していると確信しています。Apple 開発者、特に iPhone 開発者がより一般的に使用しているのはどれですか?
2 に答える
私の経験では、「どちらでもない」。なんらかの理由で、セマフォは、人気コンテストが重要になるほど一般的には使用されていません。
しかし、私はdispatch_semaphoreの大ファンです。非常に巧妙な実装。
確かにdispatch_semaphore
リソースへの同時アクセスを同期するobjcの方法は、ロックを回避するか、可能であれば@syncronizeを使用して、キュー、シリアル、または同時(ios5>)を使用することです。
複数のスレッドが共有リソースにアクセスする必要がある場合、それらは共通のシリアルキューにディスパッチできます。この方法でリソースにアクセスすることにより、カーネルトラップなしの同時アクセスを回避します。
並行キューを使用できます(wwdc11ビデオではこれが示されていると思います)。たとえば、複数のスレッドが同時に読み取り用のリソースにアクセスできるが、書き込み用の同期ポイントが必要な場合です。これは、バリアを使用して簡単に実現できます。書き込みを行うスレッドは、すべてのリーダーが完了するまで待機し、同時キューにリソースを排他的に書き込みます。その後、同時リーダーはリソースにアクセスできます。
これは、マルチスレッドを実行するための優れたリソースhttps://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091だと思います。オブジェクトの方法