4

私のクラスにはプロパティがあります:

@property (readwrite, atomic) BOOL IsTrue;

atomic修飾子についての私の理解では@synthesize、プロパティの d ゲッター/セッターは、異なるスレッドからのアクセスのシリアル化を保証します。つまり、プロデューサー スレッド A がsetプロパティ値を設定している場合、コンシューマー スレッド B および C が設定される前に設定操作を完了することが許可されます。プロパティ値に許可されgetています(ここで余談ですがatomic、シングルバイト/ PODタイプにも必要ですか?)。

volatileキーワードは、さらにデータの整合性を提供しますか?

@property (readwrite, atomic) volatile BOOL IsTrue;

私が具体的に推進しているのは、を使用せずに消費者スレッドが古い値を取得する可能性があるということvolatileです?

4

1 に答える 1

8

volatile を使用せずに消費者スレッドが古い値を取得する可能性はありますか?

いいえ。クライアントの観点から見ると、プロパティは getter/setter メソッドのペアにすぎません。objc_msgSendそのため、クライアントは値を設定または取得するために呼び出す必要があります。関数呼び出しは C の同期ポイントであるため、古い値を取得する方法はありません (ダイレクト メモリ アクセスと同様に、役立つ場合volatileがあります)。

@synthesize されたアクセサーは、基になる値へのアクセスをシリアル化します。

于 2012-11-06T09:52:09.423 に答える