concurrent_queue クラス

concurrent_queue クラスは、キューの要素に先入れ先出し方式でアクセスできるようにするシーケンス コンテナー クラスです。 これを使用すると、pushtry_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

解説

このメソッドは、pushtry_popempty の各メソッドの呼び出しに関してコンカレンシーセーフですが、呼び出しスレッドによって検査されるまでに返された値は正しくない可能性があります。

get_allocator

同時実行キューの構築に使用されるアロケーターのコピーを返します。 このメソッドはコンカレンシー セーフです。

allocator_type get_allocator() const;

戻り値

同時実行キューの構築に使用されるアロケーターのコピー。

プッシュ

同時実行キューの末尾に項目をエンキューします。 このメソッドはコンカレンシー セーフです。

void push(const T& _Src);

void push(T&& _Src);

パラメーター

_Src
キューに追加する項目。

解説

push は、pushtry_popempty の各メソッドの呼び出しに関してコンカレンシーセーフです。

try_pop

使用可能な項目がある場合、キューから項目をデキューします。 このメソッドはコンカレンシー セーフです。

bool try_pop(T& _Dest);

パラメーター

_Dest
デキューされた項目を格納する場所への参照。

戻り値

項目が正常にでキューされた場合は true、それ以外の場合は false

解説

項目が正常にデキューされた場合、_Dest パラメーターはデキューされた値を受け取り、キューに保持されている元の値が破棄され、この関数は true を返します。 デキューする項目がなかった場合、この関数はブロックせずに false を返し、_Dest パラメーターの内容は未定義になります。

try_pop は、pushtry_popempty の各メソッドの呼び出しに関してコンカレンシーセーフです。

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 はコンカレンシーセーフではないので、pushtry_popempty の各メソッドの呼び出しと同時に呼び出された場合、誤った結果が生成される可能性があります。

関連項目

コンカレンシー名前空間