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*()。 |