2012-02-10 14 views
0

スレッド内に変数を設定していますが、別のスレッドの条件でその変数を使用してチェックしています。変数セットと取得、競合条件

ここでは競合状態を認識しています。 しかし、原子的な方法でセットを行うだけで十分かどうかはわかりません。

この問題を解決する方法を教えてもらえますか?

更新: また、グローバル変数の設定方法も教えてください。

答えて

1

この一般問題への解決策の多くは、過去50年にわたって提案されてきました。 :)

セッターセマンティクスをアトミックに変更しても問題は解決しません---変数の取得と設定中に変更が行われないようにします(実際にはObjective-C Documentationを参照してください)。

必要なのは、スレッド間のシグナル伝達メカニズムです。 Objective-C Conditionsをチェックしてください。

+0

誰かがよくテストされ、この通常の問題のバグのない実装を書いていたでしょう – coder000001

0

プロパティとして定義する場合は、atomicキーワードを使用します。原子の方が遅いので、非原子的なキーワードは除外してください。

@property (atomic, retain) NSString *value; 

か、単に

@property (retain) NSString *value; 
+0

競合状態を回避するには十分でしょうか? – coder000001