2011-07-27 8 views
2

私はNSBlockOperationを介してObjCプログラムでマルチスレッドを実装しています。ブロック内で呼び出されるメソッド呼び出しの一部は、アトミックでなければなりません。メソッドアトミックをマークする方法はありますか?

@propertyを非原子/原子にすることに似ています。

このメソッドをアトミ​​ックとしてマークする方法はありますか(@synthronizedではなく)。

答えて

3

いいえ、とにかく違いはありません。 @propertyatomicと宣言すると、アブソリュート@synthesizeの場合にのみアトミックアクセサが作成されます。さもなければ、それはアトミックであることをクライアントコードに通知するだけで、アトミックなアクセッサ(あなたは@synchronizedまたは他のロックを使用して)を書く責任があります。

アトミックであると宣言できたとしても、アトミックコードを自分で記述する必要があります。

3

いいえ。プロパティアトミックのマーキングは、実際には@synthesizeのヒントです。プロパティへのアクセスがアトミックに動作するようにするには、@synchronizedの行に沿って何かを使用する必要があります。

実際には、合成ゲッター/セッターは実際には@synchronizedを使用する必要はありません。例えば、根底にあるivarがロックなしで原子的に読み書きできる場合(例えば多くのプラットフォームではプレーンなint)、コンパイラによって実際のロックが生成されないことがあります。コンパイラは、@synchronizedで使用されているロック方法ではなく、他のロック方法を自由に使用できます。

関連する問題