Androidでは、別のスレッドからプリミティブ型に安全にアクセスして修正できました。私はこれを使ってOpenGL描画ループとメインスレッドAndroid UIで変更されたユーザー設定との間でデータを共有しました。各設定をプリミティブ型に格納し、それぞれを他の値から独立させることで、ロックやsynchronizedキーワードを使用せずにこれらの変数をすべて変更することはスレッドセーフです。原子は実際に合成されたプリミティブのために何かを意味しますか?
これはObjective-Cでも当てはまりますか?変数に原子を配置すると、本質的に、Javaで同期メソッドを使用するのと同様に、合成ゲッターとセッターにロックが使用されることが読み取れます。私が読んだことは、この理由は、オブジェクトが別のスレッドによって読み込まれている間に部分的に変更されないということです。
しかし、Javaのように、部分的に変更されても安全なプリミティブ型ですか?そうであれば、スレッド間でデータを共有するために私の古いパラダイムをJavaから使うことができるようです。しかし原始的な、正しいキーワードのための原子のキーワードは無意味だろうか?
また、原子変数を使用するよりも堅牢で高速なソリューションは、オブジェクトが複数のスレッドからアクセスされている場合に使用する前にオブジェクトをコピーすることです。しかし、私はそれがどのように達成できるのか分かりません。非原型オブジェクトがコピー中に変更されてコピーを破損することはありませんか?
スレッド安全性を確保するためにatomicで基本型を宣言しないのはなぜですか? – John
[Atomic vs nonatomic properties]の複製があります。(0120-13753) – bbum
@ user1256663非常に遅いと聞きましたが、 OpenGLアプリ。懸念をフレーミングする。 – Tenfour04