std::atomic
を見てみると、それはデフォルトの専門分野は、私が読んだ:std ::組み込み型のアトミック - 非ロックフリーと些細なデストラクタ?
これらの専門分野は、標準的なレイアウトを持って、自明なデフォルトコンストラクタ、および些細なデストラクタ。
Iはまたis_lock_free
ため読み出す:
std::atomic_flag
以外のすべての原子タイプではなくロックフリー 原子CPU命令を使用するよりも、 ミューテックスまたは他のロック操作を使用して実施することができます。原子タイプは時々ロックフリーの でも可能です。アライメントされたメモリアクセスのみが特定のアーキテクチャー上で原子番号 に自然にある場合、同じタイプのミスアラインされたオブジェクトは ロックを使用する必要があります。
は今ここに、私は取得しないキャッチです:
どの規格が今までミューテックスのいずれかの種類を使用して些細なCTOR /デストラクタを規定している任意のatomic
入力することができます - 私が今まで来たすべてのmutex必要な場合には、以外 - 個人初期設定。
これは、次の質問につながる:
- する主要なプラットフォームは、オブジェクトごとに「initalization自由」である(ミューテックスのような)任意のロック操作を提供しています。
- デフォルトでは
std::atomic
の特殊化はまだロックフリーではない(まだのctor/dtorの要件を満たしています)の実装はありますか? - 私はここで何かを混乱させるだけですか? :-)
私は、最も簡単なスピンロック(atomic_flag
参照)でも簡単な初期化が必要なので、これをどのように実装できないかわかりません。
免責事項:これらのドキュメントを読んでいるうちに、まあまあ飛び出しました。
Ha!はい、これは標準的な要件を満たすと思われます。しかし、ほとんどの現実世界のユースケースに対してちょっとばかげているようですね! –
はい、それは気違いです。しかし、人々は狂気のようなアーキテクチャで動作するC++コードを書くことを望んでいます。 –
Wrt。あなたの編集:コードは(静的な)オブジェクトを値に設定するので、*簡単な初期化ではありません。 (?)もちろん、これを使用するオブジェクトは何もする必要はないので、簡単なctorを持つことができます。 –