2012-05-02 15 views
14

is_lock_freeにインスタンス(メンバー関数)が必要な理由は何ですか?なぜ型のメタ関数、または静的なconstexprメンバ関数ですか?なぜis_lock_freeはメンバ関数ですか?

私はそれがなぜ必要なのかの実際の例を探しています。

+0

is_instance_freeという名前ですか?いいえ、QED。 –

+6

これはパフォーマンスのためです[ここからの引用](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html): '提案はロックフリーを提供します問合せは全体の型ではなく個々のオブジェクトに対して機能し、アライメントされた原子変数のパフォーマンスにペナルティを課すことなく、不可避的にアライメントのとられていないアトミック変数を許容します。 –

+2

@JesseGoodなぜそれはコメントですか? ;) –

答えて

23

標準では、タイプがで、時にはロックフリーです。

セクション29.4 ロックフリー性

ATOMIC _..._ LOCK_FREEマクロは、一緒にグループ化符号付きおよび符号なしの変異体 と対応する原子の種類のロックフリー性を示します。このプロパティは、アトミックテンプレートの対応する(部分的な)特殊化にも適用されます。 0 の値は、型がロックフリーではないことを示します。 値が1の場合は、タイプがロックフリーの場合があることを示します。 値が2の場合は、 の型は常にロックフリーです。

C++ atomic paper n2427状態の背後にある理由:

...提案は実行時のロックフリーのクエリ機能ではなく コンパイル時定数を プラットフォームのその後の実装は、ロックのアップグレード可能性があるため、よりを提供ロックフリーの操作では、 システムは動的な ライブラリの背後にそのような機能を抽象化するのが一般的であり、その可能性をオープンにしておきたいと考えています。さらに、 ハードウェアアトミックサポートを持たない実装では、そのテクニック を使用することをお勧めします。 ...

も(Jesse Goodが指摘したように):

の提案はのパフォーマンスを不利にすることなく、不可避的ずれアトミック変数を可能にするために、個々のオブジェクトではなく、全体的なタイプでロックフリーのクエリ機能を提供しますアライメントされた原子変数

+0

完全性のために別の見積もりを追加しました。 – Pubby

+0

その部分はあなたの質問にも関係します。私は逃しました。 – user2k5

+0

私はまた、固定数の原子値またはsomesuchを持つ実装を想像することもできます。 – Yakk

関連する問題