ノードに渡されるメッセージの数をカウントおよび制限するノード。
template < typename T > class limiter_node;
#include "tbb/flow_graph.h"
limiter_node は、メッセージをすべてのサクセサーにブロードキャストする graph_node、receiver<T>、sender<T> です。ブロードキャストする数のカウンター C を維持して、ユーザー定義の threshold に達すると、新しいメッセージを受け付けなくなります。ブロードキャスト C の内部カウントは、continue_receiver decrement を使用してデクリメントできます。
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。 |