同時アクセス

const_accessor メンバークラスと accessor メンバークラスは、アクセサー と呼ばれます。アクセサーは、複数のスレッドが共有の concurrent_hash_map のペアを同時アクセスすることを許可します。アクセサー は、concurrent_hash_map ペアへのスマートポインターとして動作します。インスタンスが破棄されるか、release メソッドがアクセサーで呼び出されるまで、ペアの暗黙的なロックを保持します。

const_accessor クラスと accessor クラスは、許可するアクセスの種類が異なります。

const_accessor と accessor の違い

クラス

value_type

ペアの暗黙的なロック

const_accessor

const std::pair<const Key,T>

リーダーロック – ほかのリーダーで共有アクセスを許可します。

accessor

std::pair<const Key,T>

ライターロック – スレッドによる排他的アクセスを許可します。ほかのスレッドによるアクセスをブロックします。

割り当てまたはコピー構築を許可するとロック・セマンティクスが非常に複雑になるため、アクセサーは割り当てまたはコピー構築できません。

const_accessor

概要

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

キー/値ペアを指す場合は、ペアの暗黙的なロックを解放します。

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