名前空間
変種

std::atomic<T>::is_lock_free

提供: cppreference.com
 
 
 
 
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-notes t-since-cxx11 "> </tbody><tbody> </tbody>
(C++11以上)
bool is_lock_free() const noexcept;
bool is_lock_free() const volatile noexcept;

この型のすべてのオブジェクトに対するアトミック操作がロックフリーかどうか調べます。

引数

(なし)

戻り値

この型のオブジェクトに対するアトミック操作がロックフリーであれば true、そうでなければ false

ノート

std::atomic_flag を除くすべてのアトミック型は、 CPU のロックフリーなアトミック命令ではなく、ミューテックスや他のロック操作を使って実装されることがあります。 アトミック型は時々ロックフリーになることが許されています。 例えば、与えられたアーキテクチャにおいて、アラインされたメモリアクセスだけがアトミックとなる場合、アラインされていない同じ型のオブジェクトはロックを使わなければなりません。

C++ 標準は、ロックフリーなアトミック操作はアドレスフリーでもある、つまり、共有メモリを用いたプロセス間通信にも使えることを推奨しています (が、要求はしていません)。

#include <iostream>
#include <utility>
#include <atomic>

struct A { int a[100]; };
struct B { int x, y; };
int main()
{
    std::cout << std::boolalpha
              << "std::atomic<A> is lock free? "
              << std::atomic<A>{}.is_lock_free() << '\n'
              << "std::atomic<B> is lock free? "
              << std::atomic<B>{}.is_lock_free() << '\n';
}

出力例:

std::atomic<A> is lock free? false
std::atomic<B> is lock free? true

関連項目

アトミック型の操作がロックフリーかどうか調べます
(関数テンプレート) [edit]
std::shared_ptr に対するアトミック操作の特殊化
(関数テンプレート)
[静的] (C++17)
型が常にロックフリーであることを表します
(パブリック静的メンバ定数) [edit]