循環キューを共有する2つのスレッドがあります。キューの内容は符号なしの数値です(unsigned long
x86_64上)。1つのスレッドはプロデューサーで、もう1つのスレッドはコンシューマーです。プロデューサーは、キュー内の要素の値が0の場合にのみキューの要素に書き込み、プロデューサーは常にゼロ以外の値を生成しますが、コンシューマーはその値がゼロ以外の場合にのみそれを消費します。また、コンシューマーは要素を消費するたびに0にリセットするため、プロデューサーはコンシューマーが要素を消費したことを知ることができます。
このスキームでは、キュー内の要素のアクセス順序が厳密であるため、同期変数やアトミック変数を使用する必要がないということです。私の仮定は正しいですか?それとも私はここで何かが足りないのですか?x86_64には比較的厳密な整合性メモリモデルがあり、ストアの前に配置できるのは無関係の負荷のみであることに注意してください。また、キャッシュをプロアクティブに更新するキャッシュコヒーレンシも備えています。またvolatile
、コンパイラが変数をキャッシュしないようにするために変数を使用します。