9
マルチスレッドのCまたはC ++プログラミングでvolatileが役に立たないと見なされるのはなぜですか?
私が最近投稿したこの回答で示されているように、私はvolatileマルチスレッドプログラミングコンテキストでのユーティリティ(またはその欠如)について混乱しているようです。 私の理解はこれです。変数にアクセスするコードの制御の流れの外で変数が変更される可能性がある場合は常に、その変数をとして宣言する必要がありますvolatile。シグナルハンドラー、I / Oレジスター、および別のスレッドによって変更された変数はすべて、このような状況を構成します。 したがって、グローバルintがありfoo、foo1つのスレッドによって読み取られ、別のスレッドによって(おそらく適切なマシン命令を使用して)アトミックに設定されている場合、読み取りスレッドは、シグナルハンドラーによって微調整された変数を見るのと同じようにこの状況を認識します。外部ハードウェア条件によって変更されるため、foo宣言する必要がありますvolatile(または、マルチスレッドの状況では、メモリフェンスの負荷でアクセスします。これはおそらくより良い解決策です)。 どのように、どこで私は間違っていますか?