私はNSBlockOperationを介してObjCプログラムでマルチスレッドを実装しています。ブロック内で呼び出されるメソッド呼び出しの一部は、アトミックでなければなりません。メソッドアトミックをマークする方法はありますか?
@propertyを非原子/原子にすることに似ています。
このメソッドをアトミックとしてマークする方法はありますか(@synthronized
ではなく)。
私はNSBlockOperationを介してObjCプログラムでマルチスレッドを実装しています。ブロック内で呼び出されるメソッド呼び出しの一部は、アトミックでなければなりません。メソッドアトミックをマークする方法はありますか?
@propertyを非原子/原子にすることに似ています。
このメソッドをアトミックとしてマークする方法はありますか(@synthronized
ではなく)。
いいえ、とにかく違いはありません。 @property
をatomic
と宣言すると、アブソリュート@synthesize
の場合にのみアトミックアクセサが作成されます。さもなければ、それはアトミックであることをクライアントコードに通知するだけで、アトミックなアクセッサ(あなたは@synchronized
または他のロックを使用して)を書く責任があります。
アトミックであると宣言できたとしても、アトミックコードを自分で記述する必要があります。
いいえ。プロパティアトミックのマーキングは、実際には@synthesize
のヒントです。プロパティへのアクセスがアトミックに動作するようにするには、@synchronized
の行に沿って何かを使用する必要があります。
実際には、合成ゲッター/セッターは実際には@synchronized
を使用する必要はありません。例えば、根底にあるivarがロックなしで原子的に読み書きできる場合(例えば多くのプラットフォームではプレーンなint)、コンパイラによって実際のロックが生成されないことがあります。コンパイラは、@synchronized
で使用されているロック方法ではなく、他のロック方法を自由に使用できます。