limiter_node テンプレート・クラス

概要

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

構文

template < typename T > class limiter_node;

ヘッダー

#include "tbb/flow_graph.h"

説明

limiter_node は、メッセージをすべての後続 (successor) にブロードキャストする 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 は既知の先行 (predecessor) の 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

関連情報