読者です 読者をやめる 読者になる 読者になる

Boost.Atomicが採択されました

C++

【atomic】 review results


Boost.Lockfreeの内部実装として使われる、C++11標準atomicライブラリのBoost実装であるBoost.Atomicが採択されました。以下レビュー結果です:

==
Boost.Atomicの提出されたレビューは少なかったが、賛成3票、反対0票の結果となってうれしく思う。


Helge BahmannのBoost Atomic Libraryを採択する。


このライブラリは、C++11機能のC++03実装であるため、設計、APIとセマンティクスはほぼ固まっている。多くのコメント、実装詳細の全てをまとめることはしないが、提起された問題の主要なポイントは以下の通り。


C++11インタフェースの完全な実装:
このライブラリは現在、C++11ライブラリのサブセットを実装している。atomicな整数型とATOMIC_VAR_INIT / ATOMIC_FLAG_INITマクロが不足している。現在私の手元にある最新のドラフトを見て、以下の2つの機能も不足しているようだ:

template <class T> T kill_dependency(T y);

void atomic_signal_fence(memory_order);

私はHelgeに、インタフェースの完全な実装を提供してほしいと思う。



ドキュメント:
ドキュメントは現在のところ良いAPIリファレンスが不足している。従って、私はHelgeにdoxygenで生成されたリファレンスのセクションを提供してほしいと思う。それは読者が並行に慣れておく必要があることを前提としているいくつかの懸念があった。おそらくそれは、並行プログラミングおよび(または)C++11 atomicに関するいくつかの文献やチュートリアルを提供することを奨励する。
現実世界の例を示すセクションでは、おそらくshavit/herlihyの書籍『The Art of Multiprocessor Programming』へのリンクを含めることができるだろう。特定のプラットフォームやコンパイラの組み合わせをサポートする場合はそれもまた、詳細な仕様のテーブルを用意するといいだろう。


共有メモリサポート/マルチモジュールサポート:
マルチモジュールのアプリケーションと共有メモリを使用する場合は、atomicのブロッキングエミュレーションは、トラブルを引き起こす可能性がある。マルチモジュールアプリケーション向けに、共有ライブラリの内部でスピンロックプールを配置することによって解決できる。共有メモリのサポートは、各ブロック(スピン)ロックatomic<>の代わりにスピンロックのプールを使用して実現することができる。
Boostでは、boost::interprocess名前空間で共有メモリのデフォルトまたは追加の実装を提供する必要があるだろう。


Boost.Atomicを実装、提出してくれたHelgeと、レビューに参加してくれた全ての方に感謝する。