limiter_node テンプレート・クラス

概要

ノードに渡されるメッセージの数をカウントおよび制限するノード。

構文

template < typename T > class limiter_node;

ヘッダー

#include "tbb/flow_graph.h"

説明

limiter_node は、メッセージをすべてのサクセサーにブロードキャストする graph_nodereceiver<T>sender<T> です。ブロードキャストする数のカウンター C を維持して、ユーザー定義の threshold に達すると、新しいメッセージを受け付けなくなります。ブロードキャスト C の内部カウントは、continue_receiver decrement を使用してデクリメントできます。

limiter_nodetry_put 呼び出しの動作を下記に示します。

limiter_node の try_put 呼び出しの動作

カウンター C の値

bool try_put( const input_type &v )

C < しきい値の場合

C がインクリメントされ、v がすべてのサクセサーにブロードキャストされます。メッセージを受け付けるサクセサーがない場合、C はデクリメントされます。メッセージが少なくとも 1 つのサクセサーにブロードキャストされた場合は true、その他の場合は false を返します。

C == しきい値の場合

false を返します。

try_put がメンバー・オブジェクト decrement で呼び出されると、limiter_node は既知のプレデセッサーの 1 つからメッセージを取得して、そのメッセージをすべてのサクセサーに転送しようとします。プレデセッサーからメッセージを取得できない場合、C をデクリメントします。サクセサーがメッセージを拒否した場合、およびプレデセッサーからのメッセージの取得に失敗した場合、「メッセージ・パッシング・プロトコル」で説明されているプロトコルを使用して処理されます。

T は、コピー構築可能および代入可能でなければなりません。

メンバー

namespace tbb {
namespace flow {
 
template< typename T >
class limiter_node : public graph_node, public receiver<T>,
  public sender<T> {
public:
    limiter_node( graph &g, size_t threshold,
                  int number_of_decrement_predecessors = 0 );
    limiter_node( const limiter_node &src );
 
    // continue_receiver
    implementation-dependent-type decrement;
 
    // receiver<T>
    typedef T input_type;
    typedef sender<input_type> predecessor_type;
    bool try_put( const input_type &v );
    bool register_predecessor( predecessor_type &p );
    bool remove_predecessor( predecessor_type &p );
 
    // sender<T>
    typedef T output_type;
    typedef receiver<output_type> successor_type;
    bool register_successor( successor_type &r );
    bool remove_successor( successor_type &r );
    bool try_get( output_type &v );
    bool try_reserve( output_type &v );
    bool try_release( );
    bool try_consume( );
};
 
}
}
次の表は、このテンプレート・クラスのメンバーの詳細な情報を提供します。
メンバー 説明
limiter_node( graph &g, size_t threshold, int number_of_decrement_predecessors = 0 )

try_put の呼び出しをしきい値 threshold 未満に制限する limiter_node を構築します。オプションで、number_of_decrement_predecessors 値を提供できます。この値は、continue_receiver decrement のコンストラクターに渡されます。

limiter_node( const limiter_node &src )

src の構築時の状態と同じ初期状態で limiter_node を構築します。新しい limiter_node は、src と同じ graph g に属し、同じ threshold、同じ初期 number_of_decrement_predecessors が含まれます。プレデセッサーのリスト、サクセサーのリスト、ブロードキャストの現在のカウント C は src からコピーされません。

bool try_put( const input_type &v )

ブロードキャスト・カウントがしきい値未満の場合、v がすべてのサクセサーにブロードキャストされます。各サクセサー s について、s.try_put( v ) == false && s.register_predecessor( *this ) == true の場合、s はサクセサーのセットから削除されます。その他の場合、s はサクセサーのセットに残されます。

戻り値: v がブロードキャストされた場合は true。しきい値に達したために v がブロードキャストされなかった場合は false

bool register_predecessor( predecessor_type &p )

ブロードキャスト・カウントがしきい値未満になると、プレデセッサーを追加します。

プレデセッサーのセットに p を追加します。

戻り値: true

bool remove_predecessor( predecessor_type &p )

プレデセッサーのセットから p を削除します。

戻り値: true

bool register_successor( successor_type &r )

サクセサーのセットに r を追加します。

戻り値: true

bool remove_successor( successor_type &r )

サクセサーのセットから r を削除します。

戻り値: true

bool try_get( output_type &v )

バッファーは含まれていないため、アイテムは取得できません。

戻り値: false

bool try_reserve( output_type &v )

予約をサポートしません。

戻り値: false

bool try_release( )

予約をサポートしません。

戻り値: false

bool try_consume( )

予約をサポートしません。

戻り値: false

関連情報