私はdouble
の共有変数を持っています。この変数は2つのスレッドによってアクセスされます。一方のスレッドは変数を書き込むだけですが、他方のスレッドは変数を読み込みます。共有変数の競合条件
ここでも競合状態はありますか?はいの場合、C++でアトミックアクセスを実装する "簡単な"方法がありますか?書き込みよりもはるかに多くの読み込みが行われる場合、効率的に実装するにはどうすればよいですか?変数にvolatile
とマークする必要がありますか?
編集:OK「リーダー」スレッドはデータのバッチに対して定期的に機能し、新しい値の伝播は時間に影響されません。複雑なインターロックを実装するのではなく、テストする良い方法がないので、ライタースレッドが書き込む別の一時変数を宣言することができます。リーダが1バッチで終了すると、実際の変数に一時的に値を伝播させることができます。それは競争条件なしであろうか?
@Jesse:多くのコンパイラは、まだそのヘッダの作業の実装を持っていませんが。 –
シンプルなミューテックスは、あなたが良い値を読んでいることを確認するためにここで働くことができます。 mutexは、書込みスレッドが変数を使用しているときに変数へのアクセスをブロックし、完了したときに読み込みスレッドが自分の仕事を行うためにロックを解除します。 UNIXとWindowsの両方で、実装は非常に簡単です。 – Chris911
@ Chris911:mutexは不必要に高価で、1つのスレッドをブロックする可能性があります。可能な限り待ち時間のない実装が可能です。 –