speculative_spin_rw_mutex

[mutex.speculative_spin_rw_mutex]

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

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

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

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

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

ハードウェア・トランザクショナル・メモリーをサポートするプロセッサーでは、speculative_spin_rw_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 クラスに相当します。ReaderWriterMutex の要件を参照してください。

メンバー関数

speculative_spin_rw_mutex()

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

~speculative_spin_rw_mutex()

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