私のCocoa/iOSアプリケーションには、静的double
変数(これを呼びましょうfoo
)があります。これは次のようにする必要があります。
- バックグラウンドスレッドでアプリの一部によって更新されました
- メインスレッドで私のアプリの別の部分によって読まれました
へのアクセスを同期するための最も軽量な方法を探していますfoo
。
注:これらの場合の最も簡単な解決策は、通常、1つのスレッドのみが変数にアクセスするようにコードを調整することであり、したがって同期は必要ありません。foo
この場合、単一のスレッドへのアクセスを制限することは不可能であると私が判断したと仮定しましょう(おそらく、ステップ1で実行されるアクションが非常に迅速に発生するため、スレッドの切り替えは望ましくありません)。foo
「 1つのスレッドへのアクセスを制限する」という回答で応答しないでください。私はそれに代わるものを探しています。
私の現在の理解では、volatile
変数を使用することがへのアクセスを同期する最も軽量な方法foo
です。したがってfoo
、次のように宣言されます。
static volatile double foo = 60.0;
バックグラウンドスレッド書き込みコードは次のようなものです。
foo = 90.0;
メインスレッドの読み取りコードは次のようなものです。
double bar = 0.0;
bar = foo;
// use bar here …
いくつかの質問:
foo
メインスレッドは、バックグラウンドスレッドに書き込まれた後の更新された値を確認することが保証されていますか(foo
宣言されている場合volatile
)?IOW、2つのスレッドが互いの読み取り/書き込み操作の結果を確認できるようにするために十分なことをしましたか?- この状況では、ブロックやのようなミューテックスロックよりも、値に使用
volatile
する方が高速/軽量/好ましいと思います。本当?IOW、この特定のケースに最適なソリューションはありますか?double
@synchronized
NSLock
volatile