T 型のメッセージの無制限バッファー。メッセージは FIFO (先入れ先出し) 順に転送されます。
template <typename T, typename A = cache_aligned_allocator<T> > class queue_node;
#include "tbb/flow_graph.h"
queue_node は、後続 (successor) セットの 1 つの後続へ FIFO (先入れ先出し) 順にメッセージを転送する graph_node、receiver<T>、sender<T> です。 ノードに登録された順で、後続にメッセージが転送されます。 後続がメッセージを拒否すると、その後続はメッセージ・パッシング・プロトコルのポリシーに従って後続リストから削除され、セットの次の後続が試されます。 この処理は後続がメッセージを受け取るまで、またはすべての後続が試されるまで続行されます。 後続に転送された項目はバッファーから削除されます。
queue_node は予約可能で、一度に 1 つの予約をサポートします。 queue_node が予約されている間、ほかの項目は後続に転送されず、try_get の呼び出しは false を返します。 予約されている間も、try_put は true を返し、queue_node に項目を追加します。
A 型のアロケーターが、queue_node に内部メモリーを割り当てるために使用されます。
T は、コピー構築可能および代入可能でなければなりません。
後続がメッセージを拒否した場合、メッセージ・パッシング・プロトコルを使用して処理されます (詳細は、以下のリンクを参照)。
namespace tbb {
namespace flow {
template <typename T, typename A = cache_aligned_allocator<T> >
class queue_node :
public buffer_node<T, A> {
public:
queue_node( graph &g );
queue_node( const queue_node &src );
// 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( );
};
}
}
| メンバー | 説明 |
|---|---|
| queue_node( graph &g ) |
graph g に属する空の queue_node を構築します。 |
| queue_node( const queue_node &src ) |
src と同じ graph g に属する空の queue_node を構築します。 先行 (predecessor) のリスト、後続のリスト、バッファーのメッセージはコピーされません。 |
| bool try_put( const input_type &v ) |
queue_node に v を追加します。 v が queue_node の唯一の項目の場合、項目を後続に転送するタスクがキューに入れられます。戻り値: true。 |
| bool register_predecessor( predecessor_type &p ) |
値を拒否しないため、先行のリストを維持する必要はありません。 戻り値: false。 |
| bool remove_predecessor( predecessor_type &p ) |
値を拒否しないため、先行のリストを維持する必要はありません。 戻り値: false。 |
| bool register_successor( successor_type &r ) |
後続のセットに r を追加します。 戻り値: true。 |
| bool remove_successor( successor_type &r ) |
後続のセットから r を削除します。 戻り値: true。 |
| bool try_get( output_type &v ) |
戻り値: queue_node の先頭から削除して v に代入できる項目がある場合は true。 queue_node に現在項目がない場合、またはノードが予約されている場合は false。 |
| bool try_reserve( output_type &v ) |
呼び出しで true が返された場合、ノードは予約され、予約が解除または消費されるまでメッセージは転送されません。 戻り値: queue_node に項目がありノードが予約されていない場合は true。 項目を返すことができる場合、v に代入されます。 queue_node に現在項目がない場合、またはノードが予約されている場合は false。 |
| bool try_release( ) |
ノードの予約を解除します。最後に成功した try_reserve の呼び出しで返された項目が queue_node に残されます。 戻り値: ノードが現在予約されている場合は true。その他の場合は false。 |
| bool try_consume( ) |
queue_node の予約を解除します。 最後に成功した try_reserve の呼び出しで返された項目がキューの先頭からポップされます。 戻り値: queue_node が現在予約されている場合は true。その他の場合は false。 |