const_accessor メンバークラスと accessor メンバークラスは、「アクセサー」と呼ばれます。アクセサーは、複数のスレッドが共有の concurrent_hash_map のペアを同時アクセスすることを許可します。「アクセサー」は、concurrent_hash_map ペアへのスマートポインターとして動作します。インスタンスが破棄されるか、release メソッドがアクセサーで呼び出されるまで、ペアの暗黙的なロックを保持します。
const_accessor クラスと accessor クラスは、許可するアクセスの種類が異なります。
クラス |
value_type |
ペアの暗黙的なロック |
---|---|---|
const_accessor |
const std::pair<const Key,T> |
リーダーロック – ほかのリーダーで共有アクセスを許可します。 |
accessor |
std::pair<const Key,T> |
ライターロック – スレッドによる排他的アクセスを許可します。ほかのスレッドによるアクセスをブロックします。 |
割り当てまたはコピー構築を許可するとロック・セマンティクスが非常に複雑になるため、アクセサーは割り当てまたはコピー構築できません。
concurrent_hash_map のキー/値ペアへの読み取り専用アクセスを提供します。
template<typename Key, typename T, typename HashCompare, typename A> class concurrent_hash_map<Key,T,HashCompare,A>::const_accessor;
#include "tbb/concurrent_hash_map.h"
const_accessor は、concurrent_hash_map のキー/値ペアへの読み取り専用アクセスを許可します。
namespace tbb { template<typename Key, typename T, typename HashCompare, typename A> class concurrent_hash_map<Key,T,HashCompare,A>::const_accessor { public: // 型 typedef const std::pair<const Key,T> value_type; // 構築と破棄 const_accessor(); ~const_accessor(); // 調査 bool empty() const; const value_type& operator*() const; const value_type* operator->() const; // 早期解放 void release(); }; }
メンバー | 説明 |
---|---|
bool empty() const | 戻り値: インスタンスが何も指さない場合は ture。インスタンスがキー/値ペアを指す場合は false。 |
void release() | !empty() の場合、ペアの暗黙的なロックを解放して、インスタンスが何も指さないように設定します。その他の場合は、何もしません。 |
const value_type& operator*() const | empty() が true で、TBB_USE_ASSERT が非ゼロで定義された場合、アサーション・エラーが発生します。 戻り値: キー/値ペアへの const 参照。 |
const value_type* operator->() const | 戻り値: &operator*()。 |
const_accessor() | 何も指さない const_accessor を構築します。 |
const_accessor | キー/値ペアを指す場合は、ペアの暗黙的なロックを解放します。 |
concurrent_hash_map ペアへの読み取り/書き込みアクセスを提供するクラス。
template<typename Key, typename T, typename HashCompare, typename Alloc> class concurrent_hash_map<Key,T,HashCompare,A>::accessor;
#include "tbb/concurrent_hash_map.h"
accessor は、concurrent_hash_map のキー/値ペアへの読み取り/書き込みアクセスを許可します。const_accessor からの派生なので、const_accessor に暗黙的にキャストできます。
namespace tbb { template<typename Key, typename T, typename HashCompare, typename Alloc> class concurrent_hash_map<Key,T,HashCompare,Alloc>::accessor: concurrent_hash_map<Key,T,HashCompare,Alloc>::const_accessor { public: typedef std::pair<const Key,T> value_type; value_type& operator*() const; value_type* operator->() const; }; }
メンバー | 説明 |
---|---|
value_type& operator*() const | empty() が true で、TBB_USE_ASSERT が非ゼロで定義された場合、アサーション・エラーが発生します。 戻り値: キー/値ペアへの参照。 |
value_type* operator->() const | 戻り値: &operator*()。 |