• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <atomic>

    std::atomic_ref::is_lock_free

    bool is_lock_free() const noexcept;
    

    概要

    オブジェクトに対する操作がロックフリーに振る舞えるかを判定する

    戻り値

    atomic_ref<T>型のすべてのオブジェクトに対する操作がロックフリーに振る舞えるならtrue、そうでなければfalseを返す。

    falseを返す場合は、ロックで実装されることを意味する。

    備考

    • このクラスは、ミューテックスによって実装される場合がある。たとえばシグナルハンドラ内では、ミューテックス実装の場合にデッドロックが発生するため、ロックフリーで実装されている必要がある
    • 実行時の状況によらず常にロックフリーに振る舞えるかを表すatomic_ref::is_always_lock_freeメンバ定数が定義されているが、こちらは動的リンクライブラリのバージョンアップなどで、将来的にロックフリーに振る舞う可能性がある場合などに値が変動する

    #include <iostream>
    #include <atomic>
    
    int main()
    {
      int value = 1;
      std::atomic_ref<int> x{value};
    
      if (x.is_lock_free()) {
        std::cout << "atomic_ref<int> is lock-free" << std::endl;
      }
      else {
        std::cout << "atomic_ref<int> isn't lock-free" << std::endl;
      }
    }
    

    出力例

    atomic_ref<int> is lock-free
    

    バージョン

    言語

    • C++20

    処理系

    参照