2

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

@property を非アトミック/アトミックにするのと似ています。

メソッドを(を使用する代わりに)アトミックとしてマークする方法はあります@synthronizedか?

4

2 に答える 2

3

いいえ。プロパティのアトミックのマーキングは、実際には、そのプロパティに対して発行するコードが、プロパティへのアクセスがアトミックに動作することを保証するために@synthesize何かを使用する必要があるというヒントにすぎません。@synchronized

実際には、合成された getter/setter は実際に を使用する必要がないことに注意してください@synchronized。たとえば、基礎となる ivar がロックなしでアトミックに読み書きできる場合 (多くのプラットフォームではプレーンな int など)、コンパイラによって生成される実際のロックは存在しない可能性があります。コンパイラは、 で使用されるロック方法以外のロック方法も自由に使用できます@synchronized

于 2011-07-27T20:56:30.803 に答える
3

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

したがって、メソッドをアトミ​​ックとして宣言できたとしても、アトミック コードを自分で作成する必要があります。

于 2011-07-27T20:53:35.130 に答える