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。
