concurrent_queue クラス
concurrent_queue
クラスは、キューの要素に先入れ先出し方式でアクセスできるようにするシーケンス コンテナー クラスです。 これを使用すると、push
、try_pop
などの特定のコンカレンシー セーフな操作を実行できます。 ここでは、コンカレンシー セーフは、ポインターまたは反復子が常に有効であることを意味します。 要素の初期化または特定の走査順序が保証されるわけではありません。
構文
template<typename T, class _Ax>
class concurrent_queue: public ::Concurrency::details::_Concurrent_queue_base_v4;
パラメーター
T
キューに格納される要素のデータ型。
_Ax
この同時実行キューのメモリの割り当てと割り当て解除に関する詳細をカプセル化する、格納されているアロケーター オブジェクトを表す型。 この引数は省略可能であり、既定値は allocator<T>
です。
メンバー
パブリック typedef
名前 | 説明 |
---|---|
allocator_type |
同時実行キューのアロケーター クラスを表す型。 |
const_iterator |
同時実行キュー内の要素に対するスレッドセーフではない const 反復子を表す型。 |
const_reference |
読み取りと const 操作を実行するために、同時実行キューに格納された const 要素への参照を提供する型。 |
difference_type |
同時実行キュー内の 2 つの要素間の符号付き距離を提供する型。 |
iterator |
同時実行キュー内の要素に対するスレッドセーフではない反復子を表す型。 |
reference |
同時実行キューに格納されている要素への参照を提供する型。 |
size_type |
同時実行キュー内の要素の数をカウントする型。 |
value_type |
同時実行キューに格納されているデータ型を表す型。 |
パブリック コンストラクター
名前 | 説明 |
---|---|
concurrent_queue | 過負荷です。 同時実行キューを構築します。 |
~concurrent_queue デストラクター | 同時実行キューを破棄します。 |
パブリック メソッド
名前 | 説明 |
---|---|
clear | 同時実行キューをクリアし、現在エンキューされているすべての要素を破棄します。 このメソッドはコンカレンシー セーフではありません。 |
空 | このメソッドが呼び出された時点で同時実行キューが空かどうかをテストします。 このメソッドはコンカレンシー セーフです。 |
get_allocator | 同時実行キューの構築に使用されるアロケーターのコピーを返します。 このメソッドはコンカレンシー セーフです。 |
push | 過負荷です。 同時実行キューの末尾に項目をエンキューします。 このメソッドはコンカレンシー セーフです。 |
try_pop | 使用可能な項目がある場合、キューから項目をデキューします。 このメソッドはコンカレンシー セーフです。 |
unsafe_begin | 過負荷です。 同時実行キューの先頭に、iterator 型または const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフではありません。 |
unsafe_end | 過負荷です。 同時実行キューの末尾に、iterator 型または const_iterator 型の反復子を返します。 このメソッドはコンカレンシー セーフではありません。 |
unsafe_size | キュー内の項目の数を返します。 このメソッドはコンカレンシー セーフではありません。 |
解説
詳細については、「並列コンテナーと並列オブジェクト」を参照してください。
継承階層
concurrent_queue
要件
ヘッダー: concurrent_queue.h
名前空間: concurrency
clear
同時実行キューをクリアし、現在エンキューされているすべての要素を破棄します。 このメソッドはコンカレンシー セーフではありません。
void clear();
concurrent_queue
同時実行キューを構築します。
explicit concurrent_queue(
const allocator_type& _Al = allocator_type());
concurrent_queue(
const concurrent_queue& _OtherQ,
const allocator_type& _Al = allocator_type());
concurrent_queue(
concurrent_queue&& _OtherQ,
const allocator_type& _Al = allocator_type());
template<typename _InputIterator>
concurrent_queue(_InputIterator _Begin,
_InputIterator _End);
パラメーター
_InputIterator
値の範囲を指定する入力反復子の型。
_Al
このオブジェクトに対して使用するアロケーター クラス。
_OtherQ
要素のコピー元または移動元の concurrent_queue
オブジェクト。
_Begin
コピーする要素範囲内の最初の要素の位置。
_End
コピーする要素範囲を超える最初の要素の位置。
解説
すべてのコンストラクターが、アロケーター オブジェクト _Al
を格納し、キューを初期化します。
最初のコンストラクターは、空の初期キューを指定し、使用するアロケーターの型を明示的に指定します。
2 番目のコンストラクターは、同時実行キュー _OtherQ
のコピーを指定します。
3 番目のコンストラクターは、同時実行キュー _OtherQ
の移動を指定します。
4 番目のコンストラクターは、反復子の範囲 (_Begin
, _End
) で提供される値を指定します。
~concurrent_queue
同時実行キューを破棄します。
~concurrent_queue();
空
このメソッドが呼び出された時点で同時実行キューが空かどうかをテストします。 このメソッドはコンカレンシー セーフです。
bool empty() const;
戻り値
確認された時点で同時実行キューが空だった場合は true
、それ以外の場合は false
。
解説
このメソッドは、push
、try_pop
、empty
の各メソッドの呼び出しに関してコンカレンシーセーフですが、呼び出しスレッドによって検査されるまでに返された値は正しくない可能性があります。
get_allocator
同時実行キューの構築に使用されるアロケーターのコピーを返します。 このメソッドはコンカレンシー セーフです。
allocator_type get_allocator() const;
戻り値
同時実行キューの構築に使用されるアロケーターのコピー。
プッシュ
同時実行キューの末尾に項目をエンキューします。 このメソッドはコンカレンシー セーフです。
void push(const T& _Src);
void push(T&& _Src);
パラメーター
_Src
キューに追加する項目。
解説
push
は、push
、try_pop
、empty
の各メソッドの呼び出しに関してコンカレンシーセーフです。
try_pop
使用可能な項目がある場合、キューから項目をデキューします。 このメソッドはコンカレンシー セーフです。
bool try_pop(T& _Dest);
パラメーター
_Dest
デキューされた項目を格納する場所への参照。
戻り値
項目が正常にでキューされた場合は true
、それ以外の場合は false
。
解説
項目が正常にデキューされた場合、_Dest
パラメーターはデキューされた値を受け取り、キューに保持されている元の値が破棄され、この関数は true
を返します。 デキューする項目がなかった場合、この関数はブロックせずに false
を返し、_Dest
パラメーターの内容は未定義になります。
try_pop
は、push
、try_pop
、empty
の各メソッドの呼び出しに関してコンカレンシーセーフです。
unsafe_begin
同時実行キューの先頭に、iterator
型または const_iterator
型の反復子を返します。 このメソッドはコンカレンシー セーフではありません。
iterator unsafe_begin();
const_iterator unsafe_begin() const;
戻り値
同時実行キュー オブジェクトの先頭への iterator
型または const_iterator
型の反復子。
解説
concurrent_queue
クラスの反復子は低速であるため、主にデバッグに使用されます。反復は、他のキュー操作に関してコンカレンシーセーフではありません。
unsafe_end
同時実行キューの末尾に、iterator
型または const_iterator
型の反復子を返します。 このメソッドはコンカレンシー セーフではありません。
iterator unsafe_end();
const_iterator unsafe_end() const;
戻り値
同時実行キューの末尾への iterator
型または const_iterator
型の反復子。
解説
concurrent_queue
クラスの反復子は低速であるため、主にデバッグに使用されます。反復は、他のキュー操作に関してコンカレンシーセーフではありません。
unsafe_size
キュー内の項目の数を返します。 このメソッドはコンカレンシー セーフではありません。
size_type unsafe_size() const;
戻り値
同時実行キューのサイズ。
解説
unsafe_size
はコンカレンシーセーフではないので、push
、try_pop
、empty
の各メソッドの呼び出しと同時に呼び出された場合、誤った結果が生成される可能性があります。