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
を破棄します。