limiter_node

[flow_graph.limiter_node]

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


// <oneapi/tbb/flow_graph.h> ヘッダーで定義 

namespace oneapi { 
namespace tbb { 
namespace flow { 

    template< typename T, typename DecrementType=continue_msg > 
    class limiter_node : public graph_node, public receiver<T>, public sender<T> { 
    public: 
        limiter_node( graph &g, size_t threshold ); 
        limiter_node( const limiter_node &src ); 

        receiver<DecrementType>& decrementer(); 

        bool try_put( const T &v ); 
        bool try_get( T &v ); 
    }; 

} // namespace flow 
} // namespace tbb 
} // namespace oneapi

要件:

  • T タイプは、[defaultconstructible] ISO C++ 標準の DefaultConstructible の要件を満たしている必要があります。

  • DecrementType タイプは整数タイプまたは continue_msg でなければなりません。

limiter_node は、graph_nodereceiver<T>、および sender<T> です。

limiter_node には、discardingbroadcast-push プロパティーがあります。

ユーザーが指定する threshold (しきい値) に達すると、ノードは新規メッセージを受け入れません。ブロードキャストの内部カウンターは、decrementer メソッドを呼び出して取得できるノードに埋め込まれた receiver オブジェクトである デクリメンター を使用して調整されます。カウンター値は [0, threshold] 間隔になるよう切り捨てられます。

テンプレート・パラメーター DecrementType は、デクリメンターに送信可能なメッセージのタイプを指定します。このテンプレート・パラメーターは、デフォルトで continue_msg に設定されています。整数タイプが指定されている場合、デクリメンターに送信される正の値はブロードキャスト内部カウンターを減少する値を決定し、負の値はブロードキャスト内部カウンターが増加する値を決定します。

continue_msgDecrementType テンプレート・パラメーターの引数として使用される場合、limiter_nodedecrementer のポートも continue_node の動作を取得します。この動作では、ブロードキャストの内部カウンターを 1 つ減らす前に、送信されるメッセージ数が接続されている先行メッセージ数と等しくなる必要があります。

デクリメンターで try_put を呼び出した結果ブロードキャスト・カウンターの新しい値が threshold よりも小さくなると、limiter_node は既知の先行ノードの 1 つからメッセージを取得して、そのメッセージを後続ノードに転送しようとします。先行ノードからメッセージを取得できない場合、ブロードキャスト・カウンターをデクリメントします。

メンバー関数

limiter_node(graph &g, size_t threshold)

try_put の呼び出しをしきい値 threshold 未満に制限する limiter_node を構築します。

limiter_node(const limiter_node &src)

src の作成時の状態と同じ初期状態で limiter_node を作成します。新しい limiter_nodesrc と同じグラフ g に属し、同じしきい値 threshold を持ちます。先行リスト、後続リスト、ブロードキャストの現在のカウントは src からコピーされません。

receiver<DecrementType> &decrementer()

内部カウンターの調整に使用される埋め込み receiver オブジェクトへの参照を取得します。

bool try_put(const T &v)

ブロードキャスト・カウントがしきい値未満の場合、すべての後続に v がブロードキャストされます。

戻り値: v がブロードキャストされる場合は true、しきい値に達したため v がブロードキャストされない場合は false を返します。

bool try_get(T &v)

戻り値: false