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_node
、receiver<T>
、および sender<T>
です。
limiter_node
には、discarding と broadcast-push プロパティーがあります。
ユーザーが指定する threshold
(しきい値) に達すると、ノードは新規メッセージを受け入れません。ブロードキャストの内部カウンターは、decrementer
メソッドを呼び出して取得できるノードに埋め込まれた receiver
オブジェクトである デクリメンター を使用して調整されます。カウンター値は [0, threshold
] 間隔になるよう切り捨てられます。
テンプレート・パラメーター DecrementType
は、デクリメンターに送信可能なメッセージのタイプを指定します。このテンプレート・パラメーターは、デフォルトで continue_msg
に設定されています。整数タイプが指定されている場合、デクリメンターに送信される正の値はブロードキャスト内部カウンターを減少する値を決定し、負の値はブロードキャスト内部カウンターが増加する値を決定します。
continue_msg
が DecrementType
テンプレート・パラメーターの引数として使用される場合、limiter_node
の decrementer
のポートも 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_node
はsrc
と同じグラフg
に属し、同じしきい値threshold
を持ちます。先行リスト、後続リスト、ブロードキャストの現在のカウントはsrc
からコピーされません。
- receiver<DecrementType> &decrementer()
内部カウンターの調整に使用される埋め込み
receiver
オブジェクトへの参照を取得します。
- bool try_put(const T &v)
ブロードキャスト・カウントがしきい値未満の場合、すべての後続に
v
がブロードキャストされます。戻り値:
v
がブロードキャストされる場合はtrue
、しきい値に達したためv
がブロードキャストされない場合はfalse
を返します。
- bool try_get(T &v)
戻り値:
false
。