is_lock_free
インスタンスが必要な理由は何ですか(メンバー関数です)? 型のメタ関数、または静的constexpr
メンバー関数ではないのはなぜですか?
なぜそれが必要なのか、実際の例を探しています。
標準では、タイプをロックフリーにすることができます。
セクション 29.4ロックフリー プロパティ
ATOMIC_..._LOCK_FREE マクロは、対応するアトミック型のロックフリー プロパティを示し、符号付きバリアントと符号なしバリアントがグループ化されています。プロパティは、atomic テンプレートの対応する (部分的な) 特殊化にも適用されます。値 0 は、型が決してロックフリーでないことを示します。値 1 は、型がロックフリーである場合があることを示します。値 2 は、型が常にロックフリーであることを示します。
C++ アトミック ペーパー n2427には、次の理由が記載されています。
... この提案では、コンパイル時の定数ではなく実行時のロックフリーのクエリ関数を提供します。これは、プラットフォームの後続の実装がロック操作をロックフリー操作にアップグレードする可能性があるためです。そのため、システムが動的ライブラリの背後にあるそのような機能を抽象化するのが一般的です。その可能性を残していきたい。さらに、ハードウェア アトミック サポートのない実装では、その手法を使用することをお勧めします。...
また、(Jesse Goodが指摘したように):
この提案では、型全体ではなく個々のオブジェクトに対してロックフリーのクエリ関数を提供し、アラインされたアトミック変数のパフォーマンスにペナルティを課すことなく、不可避的にミスアラインされたアトミック変数を許可します。