2012-04-10 4 views
0

iPhone/Objective-Cの標準共有/排他ロック/セマフォー方式はありますか? (ファイルアクセスではなく、内部オブジェクトの操作を同期させるもの)iPhone&Objective-Cの共有/排他ロック機構?

自分自身をロールバックする必要がある場合は、構築するのに最適なプリミティブは何でしょうか?

これは、並行性を向上させるために、個別の読み書きロックを実装するために必要です。 (これは明白なはずですが、すべてのことを綴る必要があります)

+3

解決しようとしている問題の種類を明確にすることはできますか?おそらく例?他の言語のテクニックを採用するというこれらの種類の質問は、通常、他の開発環境の構造を再現するのではなく、iOSのわずかに異なるデザインに変換されると私は打ち明けています。たとえば、ロック機構ではなく同時アクセスをサポートできないdb/objectのロックを防止するには、GCDキューを使用することができます。ところで、GCDは必要な場合にセマフォを許可します。 – Rob

+0

Objective-Cには '@synchronized()'ディレクティブが含まれています:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocThreading.htmlロバート・ライアンの言葉のように、GCDはiOS(とMac OS X)でマルチスレッドを行う素晴らしい方法は、すべてのものではないが一部のものを避け、より伝統的なマルチスレッドコードを書くことが難しいことです。 –

+0

@AndrewMadsen - '@synchronized'は共有/排他を有効にしません。また、GCDキューを使用して(可能であったとしても)大量の既存のiPhoneコードを完全に再構築する必要があります。 –

答えて

1

いくつかのオプションがあります。

#include <pthread.h> // << for locks and threads 
#include <semaphore.h> // << for semaphore 

ココア(例えば)NSLock(及び専門)とロックインターフェイスをラップする:実装は、典型的にインターフェイスに基づいています。

+0

ええ、私は何か "缶詰め"を望んでいましたが、もし私が持っていなければ、おそらくそれらを使うでしょう。私はまた、NSConditionLockを見ています.NSConditionLockは、必要なプリミティブ機能を持つことに非常に近いものです。 '@ synchronized'は共有/排他オプションを実装していないことは残念です。 –

+0

@HotLicksよく、私が引用したファンダメンタルズを使用する複数の抽象があります。 '@ synchronized'は(これまでに言及されたものの中で)最も効率的ではありません。 – justin

+0

実際、pthreadにpthread_rwlockがあることがわかりました。これは、効率的で合理的に「公正」であれば、私が必要とするすべてです。 (そしてiOSが実際に実装している場合) –

関連する問題