Concurrency 名前空間

Concurrency 名前空間には、C++ 向けの並列プログラミング フレームワークである同時実行ランタイムにアクセスするためのクラスおよび関数が用意されています。 詳細については、「同時実行ランタイム」を参照してください。

namespace Concurrency;

メンバー

Typedef

名前

説明

runtime_object_identity

各メッセージ インスタンスには、メッセージング コンポーネント間でメッセージ インスタンスの複製または受け渡しを行うときに使用する ID があります。 メッセージ オブジェクトのアドレスをこの ID として指定することはできません。

TaskProc

void (__cdecl * TaskProc)(void *) として定義される、タスクの基本抽象化です。 TaskProc は、タスクの本体を呼び出すために呼び出されます。

クラス

名前

説明

agent クラス

すべての独立エージェントの基本クラスとして使用されるクラスです。 他のエージェントから状態を隠したり、メッセージ渡しでやり取りしたりするために使用します。

bad_target クラス

このクラスは、実行する操作の対象として無効なターゲットへのポインターがメッセージング ブロックに渡された場合にスローされる例外を示します。

call クラス

call メッセージング ブロックは、複数のソースを持つ、順序付けられた target_block であり、メッセージを受け取ったときに指定された関数を呼び出します。

choice クラス

choice メッセージング ブロックは、複数のソースと単一のターゲットを持つブロックであり、一連のソースとの制御フローの相互作用を表します。 choice ブロックは、複数のソースのいずれかがメッセージを生成するのを待ち、そのメッセージを生成したソースのインデックスを伝達します。

combinable クラス

combinable<T> オブジェクトは、スレッド プライベートなデータのコピーを提供し、並列アルゴリズムにおいてロック制御不要なスレッド ローカルのサブ計算を実行するために用意されています。 並列操作の最後に、スレッド プライベート サブ計算を最終結果に結合できます。 共有変数に多数の競合が発生する可能性がある場合、共有変数の代わりにこのクラスを使用することにより、パフォーマンスを改善できます。

concurrent_queue クラス

concurrent_queue クラスは、キューの要素に先入れ先出し方式でアクセスできるようにするシーケンス コンテナー クラスです。 これを使用すると、pushtry_pop などの特定の同時実行セーフな操作を実行できます。

concurrent_vector クラス

concurrent_vector クラスは、任意の要素にランダムにアクセスできるようにするシーケンス コンテナー クラスです。 これを使用すると、同時実行セーフな追加、要素アクセス、反復子アクセス、および反復子走査の各操作を実行できます。

Context クラス

実行コンテキストの抽象化を表します。

context_self_unblock クラス

このクラスは、同じコンテキストから Context オブジェクトの Unblock メソッドが呼び出された場合にスローされる例外を表します。 これは、特定のコンテキストがそれ自体のブロックを解除しようとしたことを示します。

context_unblock_unbalanced クラス

このクラスは、Context オブジェクトの Block メソッドと Unblock メソッドの呼び出しが正しく対になっていない場合にスローされる例外を示します。

critical_section クラス

同時実行ランタイムを明示的に認識する再入不可能なミューテックスです。

CurrentScheduler クラス

呼び出し元コンテキストに関連付けられている現在のスケジューラの抽象化を表します。

default_scheduler_exists クラス

このクラスは、既定のスケジューラが既にプロセス内に存在するときに Scheduler::SetDefaultSchedulerPolicy メソッドが呼び出された場合にスローされる例外を示します。

event クラス (同時実行ランタイム)

同時実行ランタイムを明示的に認識する手動リセット イベントです。

improper_lock クラス

このクラスは、ロックが正しく取得されなかった場合にスローされる例外を示します。

improper_scheduler_attach クラス

このクラスは、現在のコンテキストに既にアタッチされている Scheduler オブジェクトで Attach メソッドが呼び出された場合にスローされる例外を表します。

improper_scheduler_detach クラス

このクラスは、Scheduler オブジェクトの Attach メソッドによってスケジューラにアタッチされていないコンテキストで CurrentScheduler::Detach メソッドが呼び出された場合にスローされる例外を示します。

improper_scheduler_reference クラス

このクラスは、終了中の Scheduler オブジェクトで、スケジューラに属していないコンテキストから Reference メソッドが呼び出された場合にスローされる例外を示します。

invalid_link_target クラス

このクラスは、メッセージング ブロックの link_target メソッドが呼び出されたときに、そのメッセージング ブロックがターゲットにリンクできない場合にスローされる例外を示します。 この例外の原因としては、メッセージング ブロックのリンク数の上限を超えた場合、または特定のターゲットを同じソースに 2 回リンクしようとした場合があります。

invalid_multiple_scheduling クラス

このクラスは、task_group オブジェクトまたは structured_task_group オブジェクトの run メソッドを使用して task_handle オブジェクトが複数回スケジュールされた場合、間に wait メソッドまたは run_and_wait メソッドを呼び出さなかったときにスローされる例外を示します。

invalid_operation クラス

このクラスは、同時実行ランタイムによってスローされる他の例外の種類によって正確に記述されない無効な操作を実行しようとしたときにスローされる例外を記述します。

invalid_oversubscribe_operation クラス

このクラスは、_BeginOversubscription パラメーターが true に設定された Context::Oversubscribe メソッドを事前に呼び出さずに、_BeginOversubscription パラメーターが false に設定された Context::Oversubscribe メソッドを呼び出したときにスローされる例外を記述します。

invalid_scheduler_policy_key クラス

このクラスは、無効なキーまたは不明なキーが SchedulerPolicy オブジェクトのコンストラクターに渡された場合、あるいは、本来他の方法 (SetConcurrencyLimits メソッドなど) で変更する必要のあるキーが SchedulerPolicy オブジェクトの SetPolicyValue メソッドに渡された場合にスローされる例外を表します。

invalid_scheduler_policy_thread_specification クラス

このクラスは、SchedulerPolicy オブジェクトの同時実行数の限度を設定する際に、MinConcurrency キーに指定された値が MaxConcurrency キーの値よりも小さい場合にスローされる例外を示します。

invalid_scheduler_policy_value クラス

このクラスは、SchedulerPolicy オブジェクトのポリシー キーがそのキーの無効な値に設定された場合にスローされる例外を示します。

ISource クラス

ISource クラスは、すべてのソース ブロック用のインターフェイスです。 ソース ブロックは、メッセージを ITarget ブロックに伝達します。

ITarget クラス

ITarget クラスは、すべてのターゲット ブロックのインターフェイスです。 ターゲット ブロックは、ISource ブロックから提供されたメッセージを処理します。

join クラス

join メッセージング ブロックは、単一のターゲットと複数のソースを持つ順序付けられた propagator_block であり、各ソースから、種類が _Type であるメッセージを結合します。

message クラス

メッセージング ブロック間で渡されるデータ ペイロードが格納される、基本的なメッセージ エンベロープ。

message_not_found クラス

このクラスは、要求されたメッセージがメッセージング ブロックで見つからない場合にスローされる例外を示します。

message_processor クラス

message_processor クラスは、message オブジェクトを処理するための抽象基本クラスです。 メッセージの順序は保証されません。

missing_wait クラス

このクラスは、task_group オブジェクトまたは structured_task_group オブジェクトのデストラクターの実行時に、そのオブジェクトにスケジュールされたタスクがまだ存在する場合にスローされる例外を示します。 例外の結果としてのスタック アンワインドによりデストラクターが実行される場合、この例外はスローされません。

multi_link_registry クラス

multi_link_registry オブジェクトは、複数のソース ブロックまたは複数のターゲット ブロックを管理する network_link_registry です。

multitype_join クラス

multitype_join メッセージング ブロックは、複数のソースと単一のターゲットを持つメッセージング ブロックで、それぞれのソースから受け取った異なる種類のメッセージを 1 つに結合してターゲットに渡します。

nested_scheduler_missing_detach クラス

このクラスは、Scheduler オブジェクトの Attach メソッドによって別のスケジューラにアタッチされているコンテキストで CurrentScheduler::Detach メソッドが呼び出されなかったことを、同時実行ランタイムが検出したときにスローされる例外を表します。

network_link_registry クラス

network_link_registry 抽象基本クラスによって、ソース ブロックとターゲット ブロック間のリンクを管理します。

operation_timed_out クラス

このクラスは、操作がタイムアウトした場合にスローされる例外を表します。

ordered_message_processor クラス

ordered_message_processor は、メッセージ ブロックがメッセージを受け取った順序で処理できるようにする message_processor です。

overwrite_buffer クラス

overwrite_buffer メッセージング ブロックは、一度に 1 つのメッセージを格納することができる、複数のターゲットと複数のソースを持つ順序付けられた propagator_block です。 新しいメッセージが与えられると、それまで格納されていたメッセージは上書きされます。

propagator_block クラス

propagator_block クラスは、ソースでもありターゲットでもあるメッセージ ブロックの抽象基本クラスです。 source_block クラスと target_block クラスの両方の機能が組み合わされています。

reader_writer_lock クラス

ローカルのみのスピンを行う、ライター優先キュー ベースのリーダー ライター ロックです。 ロックはライターに先入れ先出し (FIFO: First In First Out) アクセスを許可し、ライターに連続的な負荷がかかる状況ではリーダーが処理を実行できなくします。

ScheduleGroup クラス

スケジュール グループの抽象化を表します。 スケジュール グループは、(別のグループに移動する前に同じグループ内の別のタスクを実行することで) 一時的に、または (同じ NUMA ノードまたは物理ソケットの同じグループ内の複数の項目を実行することにより) 空間的に、短い間隔でスケジュールするとメリットがある関連作業のセットを編成します。

Scheduler クラス

同時実行ランタイム スケジューラの抽象化を表します。

scheduler_not_attached クラス

このクラスは、現在のコンテキストにスケジューラがアタッチされている必要がある操作を実行するときにスケジューラがアタッチされていない場合にスローされる例外を示します。

scheduler_resource_allocation_error クラス

このクラスは、同時実行ランタイムでクリティカル リソースを取得できないためにスローされる例外を示します。

SchedulerPolicy クラス

SchedulerPolicy クラスには、ポリシー要素ごとに 1 つずつ、スケジューラ インスタンスの動作を制御するキーと値のペアのセットが含まれています。

single_assignment クラス

single_assignment メッセージング ブロックは、一度だけ書き込むことができる message を 1 つ格納できる、複数のターゲットと複数のソースを持つ順序付けられた propagator_block です。

single_link_registry クラス

single_link_registry オブジェクトは、単一のソース ブロックまたはターゲット ブロックのみを管理する network_link_registry です。

source_block クラス

source_block クラスは、ソースのみのブロックの抽象基本クラスです。 このクラスには、基本的なリンク管理機能および一般的なエラー チェック機能が用意されています。

source_link_manager クラス

source_link_manager オブジェクトは、ISource ブロックへのメッセージング ブロック ネットワーク リンクを管理します。

structured_task_group クラス

structured_task_group クラスは、並列処理の高度に構造化されたコレクションを表します。 task_handle オブジェクトを使用して個々の並列タスクを structured_task_group のキューに配置し、それらのタスクが完了するまで待機するか、実行が完了する前にタスク グループを取り消すことができます。取り消すと、実行が開始されていないタスクはすべて中止されます。

target_block クラス

target_block クラスは、基本的なリンク管理機能と、ターゲットのみのブロックのエラー チェック機能を実現する抽象基本クラスです。

task_group クラス

task_group クラスは、待機または取り消しができる並列処理のコレクションを表します。

task_handle クラス

task_handle クラスは個々の並列作業項目を表します。 このクラスは、1 つの処理を実行するために必要な命令およびデータをカプセル化します。

timer クラス

timer メッセージング ブロックは単一のターゲットを持つ source_block であり、指定された時間の経過後か、特定の間隔で、メッセージをターゲットに送信することができます。

transformer クラス

transformer メッセージング ブロックは、単一のターゲットと複数のソースを持つ順序付けられた propagator_block であり、1 つの種類のメッセージを複数受け入れ、別の種類のメッセージを無制限に格納することができます。

unbounded_buffer クラス

unbounded_buffer メッセージング ブロックは、メッセージを無制限に格納することができる、複数のターゲットと複数のソースを持つ順序付けられた propagator_block です。

unsupported_os クラス

このクラスは、サポート外のオペレーティング システムが使用された場合にスローされる例外を表します。 同時実行ランタイムでは、Windows XP Service Pack 3 より前のバージョンのオペレーティング システムはサポートされません。

構造体

名前

説明

DispatchState 構造体

DispatchState 構造体は、状態を IExecutionContext::Dispatch メソッドに転送するために使用されます。 Dispatch メソッドが IExecutionContext インターフェイスで呼び出される状況を示します。

IExecutionContext 構造体

特定の仮想プロセッサで実行でき、協調的にコンテキストを切り替えることができる実行コンテキストへのインターフェイスです。

IExecutionResource 構造体

ハードウェア スレッドの抽象化です。

IResourceManager 構造体

同時実行ランタイムのリソース マネージャーに対するインターフェイスです。 これは、スケジューラがリソース マネージャーと通信する際に使用されるインターフェイスです。

IScheduler 構造体

作業スケジューラの抽象化のインターフェイスです。 同時実行ランタイムのリソース マネージャーは、このインターフェイスを使用して作業スケジューラと通信します。

ISchedulerProxy 構造体

スケジューラは、このインターフェイスを使用して同時実行ランタイムのリソース マネージャーと通信して、リソース割り当てをネゴシエートします。

IThreadProxy 構造体

実行スレッドの抽象化です。 作成するスケジューラの SchedulerType ポリシー キーに応じて、リソース マネージャーは、通常の Win32 スレッドまたはユーザー モード スケジュール可能 (UMS: User-Mode Schedulable) スレッドによってサポートされるスレッド プロキシを許可します。 UMS スレッドは、Windows 7 以上のバージョンの 64 ビット オペレーティング システムでサポートされます。

IUMSCompletionList 構造体

UMS の完了リストを表します。 UMS スレッドがブロックされると、基になる仮想プロセッサ ルートでスケジュールする内容を決定するためにスケジューラで指定されているスケジュールのコンテキストがディスパッチされ、元のスレッドがブロックされます。 元のスレッドがブロックされない場合、オペレーション システムは、このインターフェイスからアクセスできる完了リストのキューにそれを配置します。 スケジューラは指定されたスケジュール コンテキスト、または作業を検索するその他の場所にある完了リストを照会できます。

IUMSScheduler 構造体

同時実行ランタイムのリソース マネージャーによってユーザー モード スケジュール可能 (UMS) スレッドが渡される必要がある作業スケジューラの抽象化のインターフェイスです。 リソース マネージャーでは、このインターフェイスを使用して UMS スレッド スケジューラと通信します。 IUMSScheduler インターフェイスは IScheduler インターフェイスを継承します。

IUMSThreadProxy 構造体

実行スレッドの抽象化です。 ユーザー モード スケジュール可能 (UMS) スレッドをスケジューラに付与するには、スケジューラ ポリシー要素 SchedulerKind の値を UmsThreadDefault に設定し、さらに IUMSScheduler インターフェイスを実装する必要があります。 UMS スレッドは、Windows 7 以上のバージョンの 64 ビット オペレーティング システムでのみサポートされます。

IUMSUnblockNotification 構造体

ブロックされ、スケジューラの指定されたスケジュール コンテキストに制御を戻すことをトリガーされたスレッド プロキシが、ブロック解除され、スケジュールできる状態であることを示す、リソース マネージャーからの通知を表します。 このインターフェイスは、GetContext メソッドから返される、スレッド プロキシの関連付けられた実行コンテキストが再スケジュールされると無効になります。

IVirtualProcessorRoot 構造体

スレッド プロキシが実行できるハードウェア スレッドの抽象化です。

列挙型

名前

説明

agent_status 列挙体

agent の有効な状態。

ConcRT_EventType 列挙型

同時実行ランタイムによって提供されるトレース機能を使用してトレースできるイベントの種類。

CriticalRegionType 列挙型

コンテキストが存在するクリティカル領域の種類。

DynamicProgressFeedbackType 列挙型

DynamicProgressFeedback ポリシーによって使用され、スケジューラのリソースのバランスを再調整する際の判断基準として、スケジューラから収集された統計情報に従うか、または IVirtualProcessorRoot インターフェイスの Activate メソッドおよび Deactivate メソッドの呼び出しによってアイドル状態との間で状態が変化する仮想プロセッサのみに基づくかを示します。 使用できるスケジューラ ポリシーの詳細については、「PolicyElementKey 列挙型」を参照してください。

join_type 列挙体

join メッセージング ブロックの種類。

message_status 列挙型

ブロックへの message オブジェクトの提供に対する有効な応答。

PolicyElementKey 列挙型

ポリシー キーは、スケジューラの動作をさまざまな側面から表します。 各ポリシー要素は、キーと値の組み合わせで表現されます。 スケジューラ ポリシーと、スケジューラに対するその影響の詳細については、「タスク スケジューラ (同時実行ランタイム)」を参照してください。

SchedulerType 列挙型

基になる実行コンテキスト用にスケジューラが利用するスレッドの種類を示すために、SchedulerKind ポリシーにより使用されます。 使用できるスケジューラ ポリシーの詳細については、「PolicyElementKey 列挙型」を参照してください。

SchedulingProtocolType 列挙型

スケジューラに使用されるスケジューリング アルゴリズムを記述するために、SchedulingProtocol ポリシーによって使用されます。 使用できるスケジューラ ポリシーの詳細については、「PolicyElementKey 列挙型」を参照してください。

SwitchingProxyState 列挙型

あるスレッド プロキシから別のスレッド プロキシへの協調的なコンテキスト切り替えを実行するときに、スレッド プロキシの状態を示すために使用します。

task_group_status 列挙型

task_group オブジェクトまたは structured_task_group オブジェクトの実行状態を示します。 この型の値は、タスク グループに対してスケジュールされたタスクが完了するのを待機している多数のメソッドによって返されます。

関数

名前

説明

asend 関数

オーバーロードされます。 ターゲット ブロックにデータを反映するタスクをスケジュールする非同期送信操作です。

make_choice 関数

オーバーロードされます。 オプションの Scheduler または ScheduleGroup および 2 ~ 10 個の入力ソースから choice メッセージング ブロックを構築します。

make_greedy_join 関数

オーバーロードされます。 オプションの Scheduler または ScheduleGroup および 2 ~ 10 個の入力ソースから greedy multitype_join メッセージング ブロックを構築します。

make_join 関数

オーバーロードされます。 オプションの Scheduler または ScheduleGroup および 2 ~ 10 個の入力ソースから non_greedy multitype_join メッセージング ブロックを構築します。

make_task 関数

task_handle オブジェクトを作成するためのファクトリ メソッドです。

parallel_for 関数

オーバーロードされます。 parallel_for は、一定の範囲のインデックスを反復処理し、各反復処理で、ユーザーが指定した関数を並列で実行します。

parallel_for_each 関数

parallel_for_each は、指定された関数を範囲内の各要素に並列で適用します。 意味的には std 名前空間の for_each 関数と同等ですが、要素に対する反復処理が並列で行われる点、および反復処理の順序が指定されていない点が異なります。 引数 _Func は、operator()(T) の形式の関数呼び出し演算子をサポートしている必要があります (T パラメーターは反復処理するコンテナーの項目の種類を示します)。

parallel_invoke 関数

オーバーロードされます。 パラメーターとして渡された関数オブジェクトを並列実行し、実行が完了するまでブロックします。 各関数オブジェクトは、ラムダ式、関数へのポインター、またはシグネチャ void operator()() を持つ関数呼び出し演算子をサポートするオブジェクトになります。

receive 関数

オーバーロードされます。 receive の一般的な実装です。これにより、コンテキストで 1 つのソースからのデータを待機し、受け取った値をフィルター処理できます。

send 関数

オーバーロードされます。 ターゲットがメッセージを受け入れるか拒否するまで待機する同期送信操作です。

swap 関数

2 つの concurrent_vector オブジェクトの要素を交換します。

try_receive 関数

オーバーロードされます。 try-receive の一般的な実装です。これにより、コンテキストで 1 つのソースに対してのみデータの検索を実行し、受け取った値をフィルター処理できます。 データが準備されていない場合、メソッドは false を返します。

演算子

名前

説明

operator!= 演算子 (concurrent_vector)

演算子の左側の concurrent_vector オブジェクトが右側の concurrent_vector オブジェクトと等しくないかどうかを調べます。

operator< 演算子 (concurrent_vector)

演算子の左側の concurrent_vector オブジェクトが右側の concurrent_vector オブジェクトより小さいかどうかを調べます。

operator<= 演算子 (concurrent_vector)

演算子の左側の concurrent_vector オブジェクトが右側の concurrent_vector オブジェクト以下かどうかを調べます。

operator== 演算子 (concurrent_vector)

演算子の左側の concurrent_vector オブジェクトが右側の concurrent_vector オブジェクトと等しいかどうかを調べます。

operator> 演算子 (concurrent_vector)

演算子の左側の concurrent_vector オブジェクトが右側の concurrent_vector オブジェクトより大きいかどうかを調べます。

operator>= 演算子 (concurrent_vector)

演算子の左側の concurrent_vector オブジェクトが右側の concurrent_vector オブジェクト以上であるかどうかを調べます。

定数

名前

説明

ChoreEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、作業またはタスクに直接関係する ETW イベントを表すカテゴリの GUID。

ConcRT_ProviderGuid 定数

同時実行ランタイムの ETW プロバイダーの GUID。

CONCRT_RM_VERSION_1 定数

Visual Studio 2010 で定義されているリソース マネージャー インターフェイスのサポートを示します。

ConcRTEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、別のカテゴリで具体的に説明されていない ETW イベントを表すカテゴリの GUID。

ContextEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、コンテキストに直接関係する ETW イベントを表すカテゴリの GUID。

COOPERATIVE_TIMEOUT_INFINITE 定数

待機がタイムアウトしないことを示す値。

COOPERATIVE_WAIT_TIMEOUT 定数

待機がタイムアウトしたことを示す値。

INHERIT_THREAD_PRIORITY 定数

スケジューラのすべてのコンテキストのスレッド優先順位が、スケジューラを作成したスレッドの優先順位と同じになることを示す ContextPriority ポリシー キーの特別な値。

LockEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、ロックに直接関係する ETW イベントを表すカテゴリの GUID。

MaxExecutionResources 定数

MinConcurrency ポリシー キーおよび MaxConcurrency ポリシー キーの特殊な値。 他の制約が存在しない場合、既定でコンピューター上のハードウェア スレッドの数になります。

PPLParallelForeachEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、parallel_for_each 関数の使用に直接関係する ETW イベントを表すカテゴリの GUID。

PPLParallelForEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、parallel_for 関数の使用に直接関係する ETW イベントを表すカテゴリの GUID。

PPLParallelInvokeEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、parallel_invoke 関数の使用に直接関係する ETW イベントを表すカテゴリの GUID。

ResourceManagerEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、リソース マネージャーに直接関係する ETW イベントを表すカテゴリの GUID。

ScheduleGroupEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、スケジュール グループに直接関係する ETW イベントを表すカテゴリの GUID。

SchedulerEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、スケジューラ アクティビティに直接関係する ETW イベントを表すカテゴリの GUID。

VirtualProcessorEventGuid 定数

同時実行ランタイムによって生成される ETW イベントのうち、仮想プロセッサに直接関係する ETW イベントを表すカテゴリの GUID。

必要条件

ヘッダー: agents.h、concrt.h、concrtrm.h、concurrent_queue.h、concurrent_vector.h、ppl.h

参照

その他の技術情報

参照 (同時実行ランタイム)