acquire operation
C ++ 11標準では、セクション1.10 / 5で言及されていますが、用語、、、release operation
およびを正式に定義していませんconsume operation
。次に、セクション29で、これらの用語を使用して、特定のメモリ順序、不可分操作、およびメモリフェンスのアクションを説明します。たとえば、「順序と一貫性」の29.3/1は次のように述べています。
memory_order_release、memory_order_acq_rel、およびmemory_order_seq_cst:ストア操作は、影響を受けるメモリ位置に対してリリース操作[強調追加]を実行します。
このタイプの言語はセクション29全体で繰り返されますが、memory_order
列挙のすべての意味が、標準では形式化されていないように見える操作タイプに基づいているのに、一般的に合意された意味を持っている必要があるのは少し気になります定義として有効であるため。
別の言い方をすれば、「バーは反転したfooです」と言った場合、どちらの用語も正式に定義されていないため、barとfooの具体的な意味はあいまいです。それらの相対的な性質のみが定義されています。
C ++ 11標準、またはその他のC ++ 11標準委員会の文書は、、などが正確に何であるかを正式に定義していますかacquire operation
、release operation
それともこれらは単に一般的に理解されている用語ですか?後者の場合、これらの操作の意味について業界標準と見なされる優れたリファレンスはありますか?ハードウェアメモリの整合性モデルは同じように作成されていないため、具体的に質問します。したがって、実装コンパイラなどがこれらの操作のセマンティクスをネイティブアセンブリコマンドに適切に変換できるようにする、一般的に合意されたリファレンスが必要だと考えています。