6

2 つの異なるコアに固定された 2 つのスレッド (t1 と t2) があります。どちらも、クラス型への生のポインタである共有変数を持っています。t1 はポインターの読み取りのみを行い、t2 はポインターの読み取り/書き込みを行います。ポインターを揮発性またはアトミック、またはその両方として宣言する必要がありますか?

t2 がこのポインターを更新するとき、t1 が古いものまたは新しいものを読み取っても問題ありませんが、中間値を読み取るべきではありません。

4

2 に答える 2

6

volatile変数によって使用されるメモリへの繰り返しアクセスを最適化しないようにコンパイラに指示するのに役立ちます。別のスレッドが変数を更新している可能性がある場合は、明らかにこれが必要です。「ほとんど役に立たない」と呼ばれる理由は、多くの場合、これでは適切なマルチスレッド動作を保証するには不十分であり、メモリ フェンスとアトミック プリミティブ操作を確認する必要があるためです。

Intel などの一部のプロセッサ アーキテクチャでは、メモリが適切に配置されている限り、整数またはポインタへの読み取りまたは書き込みはアトミックになります。たとえば、http://software.intel.com/en-us/forums/showpost.php?p=31711を参照してください。インテルのリンクは変化し続けるため、決定的なリソースを見つけることができませんでした。

于 2012-04-11T19:28:49.817 に答える
3

volatileマルチスレッドには役に立たないので、そのオプションはありません。実際、アトミック変数が必要なだけです。

于 2012-04-11T18:36:03.937 に答える