NSBlockOperation を介して ObjC プログラムにマルチスレッドを実装しています。ブロック内で呼び出されるメソッド呼び出しの一部は、アトミックでなければなりません。
@property を非アトミック/アトミックにするのと似ています。
メソッドを(を使用する代わりに)アトミックとしてマークする方法はあります@synthronized
か?
NSBlockOperation を介して ObjC プログラムにマルチスレッドを実装しています。ブロック内で呼び出されるメソッド呼び出しの一部は、アトミックでなければなりません。
@property を非アトミック/アトミックにするのと似ています。
メソッドを(を使用する代わりに)アトミックとしてマークする方法はあります@synthronized
か?
いいえ。プロパティのアトミックのマーキングは、実際には、そのプロパティに対して発行するコードが、プロパティへのアクセスがアトミックに動作することを保証するために@synthesize
何かを使用する必要があるというヒントにすぎません。@synchronized
実際には、合成された getter/setter は実際に を使用する必要がないことに注意してください@synchronized
。たとえば、基礎となる ivar がロックなしでアトミックに読み書きできる場合 (多くのプラットフォームではプレーンな int など)、コンパイラによって生成される実際のロックは存在しない可能性があります。コンパイラは、 で使用されるロック方法以外のロック方法も自由に使用できます@synchronized
。
いいえ、とにかく違いはありません。@property
asを宣言するとatomic
、アクセサーも作成する場合にのみアトミック アクセサーが作成され@synthesize
ます。それ以外の場合は、それがアトミックであることをクライアント コードに通知するだけであり、アトミックな (@synchronized
または他のロックを使用して) アクセサーを作成する責任があります。
したがって、メソッドをアトミックとして宣言できたとしても、アトミック コードを自分で作成する必要があります。