1

NSCondition とセマフォ (c API から) の違いを理解していると確信しています。Apple 開発者、特に iPhone 開発者がより一般的に使用しているのはどれですか?

4

2 に答える 2

7

私の経験では、「どちらでもない」。なんらかの理由で、セマフォは、人気コンテストが重要になるほど一般的には使用されていません。

しかし、私はdispatch_semaphoreの大ファンです。非常に巧妙な実装。

于 2012-12-03T18:35:14.533 に答える
3

確かにdispatch_semaphore

リソースへの同時アクセスを同期するobjcの方法は、ロックを回避するか、可能であれば@syncronizeを使用して、キュー、シリアル、または同時(ios5>)を使用することです。

複数のスレッドが共有リソースにアクセスする必要がある場合、それらは共通のシリアルキューにディスパッチできます。この方法でリソースにアクセスすることにより、カーネルトラップなしの同時アクセスを回避します。

並行キューを使用できます(wwdc11ビデオではこれが示されていると思います)。たとえば、複数のスレッドが同時に読み取り用のリソースにアクセスできるが、書き込み用の同期ポイントが必要な場合です。これは、バリアを使用して簡単に実現できます。書き込みを行うスレッドは、すべてのリーダーが完了するまで待機し、同時キューにリソースを排他的に書き込みます。その後、同時リーダーはリソースにアクセスできます。

これは、マルチスレッドを実行するための優れたリソースhttps://developer.apple.com/library/mac/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008091だと思います。オブジェクトの方法

于 2012-12-03T19:11:15.283 に答える