speculative_spin_mutex

[mutex.speculative_spin_mutex]

speculative_spin_mutex は、スピンロックを使用して Mutex の要件をモデル化するクラスであり、ハードウェア・トランザクショナル・メモリー (インテル® トランザクショナル・シンクロナイゼーション・エクステンション (インテル® TSX) など) をサポートするプロセッサーでは、保護されたデータを競合することなく並列に変更する方法を実装します。

speculative_spin_mutex は、フェアではなく再帰的ではありません。speculative_spin_mutexspin_mutex と似ていますが、次の条件を満たす場合に非スペキュレーティブ・ミューテックスよりも優れたスループットを提供します:

  • ハードウェア・トランザクショナル・メモリーをサポートするプロセッサーで実行される場合。

  • ミューテックスで保護されたクリティカルなセクションを、複数のスレッドが競合することなく同時に実行できる場合。

その他の場合は、spin_mutex のように実行されますが、スループットは低下します。


// <oneapi/tbb/spin_mutex.h> ヘッダーで定義 

namespace oneapi { 
namespace tbb { 

    class speculative_spin_mutex { 
    public: 
        speculative_spin_mutex() noexcept; 
        ~speculative_spin_mutex(); 

        speculative_spin_mutex(const speculative_spin_mutex&) = delete; 
        speculative_spin_mutex& operator=(const speculative_spin_mutex&) = delete; 

        class scoped_lock; 

        static constexpr bool is_rw_mutex = false; 
        static constexpr bool is_recursive_mutex = false; 
        static constexpr bool is_fair_mutex = false; 
    }; 
} // namespace tbb 
} // namespace oneapi

メンバークラス

class scoped_lock

scoped_lock クラスに相当します。Mutex の要件を参照してください。

メンバー関数

speculative_spin_mutex()

ロック解除された speculative_spin_mutex を作成します。

~speculative_spin_mutex()

ロックここで、解除された speculative_spin_mutex を破棄します。