スレッド内に変数を設定していますが、別のスレッドの条件でその変数を使用してチェックしています。変数セットと取得、競合条件
ここでは競合状態を認識しています。 しかし、原子的な方法でセットを行うだけで十分かどうかはわかりません。
この問題を解決する方法を教えてもらえますか?
更新: また、グローバル変数の設定方法も教えてください。
スレッド内に変数を設定していますが、別のスレッドの条件でその変数を使用してチェックしています。変数セットと取得、競合条件
ここでは競合状態を認識しています。 しかし、原子的な方法でセットを行うだけで十分かどうかはわかりません。
この問題を解決する方法を教えてもらえますか?
更新: また、グローバル変数の設定方法も教えてください。
この一般問題への解決策の多くは、過去50年にわたって提案されてきました。 :)
セッターセマンティクスをアトミックに変更しても問題は解決しません---変数の取得と設定中に変更が行われないようにします(実際にはObjective-C Documentationを参照してください)。
必要なのは、スレッド間のシグナル伝達メカニズムです。 Objective-C Conditionsをチェックしてください。
プロパティとして定義する場合は、atomicキーワードを使用します。原子の方が遅いので、非原子的なキーワードは除外してください。
@property (atomic, retain) NSString *value;
か、単に
@property (retain) NSString *value;
競合状態を回避するには十分でしょうか? – coder000001
誰かがよくテストされ、この通常の問題のバグのない実装を書いていたでしょう – coder000001