C++1z memory_order_consumeを一時的に非推奨化

並行プログラミングでのアトミック操作をする上で、処理の順序保証をする仕組みとしてメモリオーダーがあります。C++の標準ライブラリではメモリオーダーが何種類か提供されていますが、C++1zではmemory_order_consumeというメモリオーダーが一時的に非推奨になります。

memory_order_consumeは、データ依存性 (Data dependency) を調べて関連するデータの処理順序を保証するというものですが、ユーザーコミュニティから「その定義が現実に即していない」「acquire/releaseより弱いから使いにくい」といった意見が多く上がったため、よりよい定義に変更するまでの間、一時的にmemory_order_consumeが非推奨となります。

仕様上は「非推奨 (deprecated)」という扱いではなく、「仕様検討中」という注釈が付きます。

関連する機能として、std::kill_depedency()関数や、[[carries_dependency]]属性があります。これらの機能もしばらく使わないことになるでしょう。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。