Concurrency 命名空间
Concurrency 命名空间提供了一些类和函数,可以利用它们访问并发运行时(针对 C++ 的并发编程框架)。 有关更多信息,请参见 并发运行时。
namespace Concurrency;
成员
Typedef
Name |
说明 |
---|---|
runtime_object_identity |
每个消息实例后面都有一个标识,因为它已被克隆并在消息元素之间传递。 这不能为消息对象的地址。 |
TaskProc |
任务的基本抽象定义为 void (__cdecl * TaskProc)(void *)。 调用 TaskProc 来调用任务正文。 |
类
Name |
说明 |
---|---|
旨在用作所有独立代理的基类的类。 用于对其他代理隐藏状态并通过消息传递进行交互。 |
|
此类描述每当消息块将指针给予目标,而该目标对于正在执行的操作无效时引发的异常。 |
|
call 消息块是多源有序的 target_block,可以在接收消息时调用指定的函数。 |
|
choice 消息块是多源且单个目标的块,表示与一组源进行的控制流交互。 选择块将等待多个源的任何一个来生成消息,并将传播生成该消息的源的索引。 |
|
combinable<T> 对象旨在提供数据的线程私有副本,以在并行算法期间执行无锁线程本地子计算。 在并行操作结束时,线程私有 sub-computation 则可以合并到最终结果。 该类可替代共享变量使用,如果在该共享变量上可能存在大量争用,则可能会使性能提高。 |
|
concurrent_queue 类是允许对其元素进行先进先出访问的序列容器类。 它支持一组有限的并发安全操作,如 push 和 try_pop 等。 |
|
concurrent_vector 类是允许对任意元素进行随机访问的序列容器类。 它支持并发安全追加、元素访问、迭代器访问和迭代器遍历操作。 |
|
表示执行上下文的抽象。 |
|
该类描述每当从同一上下文调用 Context 对象的 Unblock 方法时引发的异常。 这将指示给定上下文自身解锁的尝试。 |
|
此类描述每当对 Context 对象的 Block 和 Unblock 方法调用而配对不恰当时引发的异常。 |
|
一个明确知道并发运行时的非重入互斥体。 |
|
表示与调用上下文相关联的当前计划程序的抽象。 |
|
此类描述每次 Scheduler::SetDefaultSchedulerPolicy 方法调用时在进程内已存在默认计划程序时引发的异常。 |
|
一个明确知道并发运行时的手动重置事件。 |
|
此类描述每次不正确地获取锁定时引发的异常。 |
|
此类描述每次 Attach 方法调用已附加到当前上下文的 Scheduler 对象时引发的异常。 |
|
此类描述每当在上下文上调用 CurrentScheduler::Detach 方法,而该上下文尚未通过 Scheduler 对象的 Attach 方法附加至任何计划程序时引发的异常。 |
|
此类描述每当从并非该计划程序一部分的上下文在正在关闭的 Scheduler 对象上调用 Reference 方法时引发的异常。 |
|
此类描述每当调用消息块的 link_target 方法,并且消息块无法链接到目标时引发的异常。 这可能是超出消息块允许的链接数目或两次尝试将特定目标链接至同一源的结果。 |
|
此类描述通过task_group 或 structured_task_group 对象的 run 方法,而不中间调用 wait 或 run_and_wait 方法来多次计划 task_handle 对象而引发的异常。 |
|
此类描述执行无效操作时引发的异常,该类不比并发运行时引发的另一异常类型描述得更为准确。 |
|
此类描述当调用 Context::Oversubscribe 方法时引发的异常,同时 _BeginOversubscription 参数设置为 false,不在 _BeginOversubscription 参数设置为 true 时事先调用 Context::Oversubscribe 方法。 |
|
此类描述每当无效或未知项传递至 SchedulerPolicy 对象构造函数,或 SchedulerPolicy 对象的 SetPolicyValue 方法被传递了项,而该项必须经过其他诸如 SetConcurrencyLimits 方法的方式更改时引发的异常。 |
|
此类描述每当尝试设置 SchedulerPolicy 对象的并发限制,使得 MinConcurrency 键的值小于 MaxConcurrency 键的值时引发的异常。 |
|
此类描述每当 SchedulerPolicy 对象的策略项设置为该项无效值时引发的异常。 |
|
ISource 类是所有源块的接口。 源块将消息传播到 ITarget 块。 |
|
ITarget 类是所有目标块的接口。 目标块使用 ISource 块提供给他们的消息。 |
|
join 消息块是一个单目标、多源、有序的 propagator_block,可以合并来自其每个源的类型为 _Type 的消息。 |
|
包含正在消息块之间传递数据负载的基本消息信封。 |
|
此类描述每当消息块找不到请求的消息时引发的异常。 |
|
message_processor 类是用于处理 message 对象的抽象基类。 信息的顺序无法确保固定。 |
|
此类描述每当执行对象的析构函数时仍然将任务计划至 task_group 或 structured_task_group 对象时引发的异常。 如果析构函数因为堆栈展开为异常的结果而被达到,将永远不会引发此异常。 |
|
multi_link_registry 对象是 network_link_registry,管理多个源块或多个目标块。 |
|
multitype_join 消息块是一个多源、单目标的消息块,可以合并来自其每个源的不同类型的消息并将组合消息的元组提供给其目标。 |
|
此类描述并发运行时检测到您忽略在通过 Scheduler 对象的 Attach 方法在附加至第二计划程序的上下文上调用 CurrentScheduler::Detach 方法时引发的异常。 |
|
network_link_registry 的抽象基类管理源和目标块之间的链接。 |
|
此类描述操作超时时引发的异常。 |
|
ordered_message_processor 是允许消息块按接受的顺序处理消息的 message_processor。 |
|
overwrite_buffer 消息块是一个多目标、多源、有序的 propagator_block,一次能够存储一条消息。 新消息覆盖之前保存的消息。 |
|
propagator_block 类是同时为源和目标的消息块的一个抽象基类。 组合了 source_block 和 target_block 类的功能。 |
|
只能本地旋转的基于编写器首选队列的读取器-编写器锁。 锁授予对编写器的先进先出 (FIFO) 访问,并使读取器在编写器在持续负载的情况下停止。 |
|
表示计划组的抽象。 计划组组织受益于在时间上(通过在移到另一个组之前执行同一组中另一个任务)或空间上(通过在同一 NUMA 节点或物理套接字上执行同一个组内的多项)紧密安排在一起的一组相关工作。 |
|
表示并发运行时计划程序的抽象。 |
|
此类描述每当需要一个计划程序来附加到当前的上下文来执行操作,而实际并未如此时引发的异常。 |
|
此类描述由于无法在并发运行时中获取关键资源而引发的异常。 |
|
SchedulerPolicy 类包含一组键/值对,一个用于每个策略元素,其控制计划程序实例的行为。 |
|
single_assignment 消息块是一个多目标、多源、有序的 propagator_block,能够存储单个、只写一次的 message。 |
|
single_link_registry 对象是一个 network_link_registry,其只管理单个源或目标块。 |
|
source_block 是仅限于源的块的抽象基类。 该类提供了基本的链接管理功能,还提供了常见的错误检查。 |
|
source_link_manager 对象管理 ISource 块的消息阻止网络链接。 |
|
structured_task_group 类表示并行工作的高度结构化集合。 可以使用 task_handle 对象将各个任务排队至 structured_task_group 中,并等待它们完成,或在它们完成执行之前取消任务组,这将中止尚未开始执行的所有任务。 |
|
target_block 类是一个抽象基类,提供基本链接管理功能和仅限于目标的块的错误检查。 |
|
task_group 类表示可以等待或取消的并行工作集合。 |
|
task_handle 类表示单个并行工作项目。 它封装了说明和执行一段工作所需的数据。 |
|
timer 消息块是一个单目标 source_block,能够在经过指定的时间段后或在特定时间间隔向其目标发送消息。 |
|
transformer 消息块是一个单目标、多源、有序的 propagator_block,可以接受同一类型的消息,并能够存储大量不同类型的消息。 |
|
unbounded_buffer 消息块是一个多目标、多源、有序的 propagator_block,能够存储大量消息。 |
|
此类描述使用不受支持的操作系统时引发的异常。 并发运行时不支持 Windows XP Service Pack 3 之前的操作系统。 |
结构
Name |
说明 |
---|---|
DispatchState 结构用于将状态传递给 IExecutionContext::Dispatch 方法。 它描述了一些情形,即调用 IExecutionContext 接口上的 Dispatch 方法的情形。 |
|
可以在指定虚拟处理器上运行并可以协作切换上下文的执行上下文的接口。 |
|
硬件线程的抽象。 |
|
并发运行时资源管理器的接口。 这是计划程序与资源管理器通信的接口。 |
|
工作计划程序抽象的接口。 并发运行时的资源管理器使用该接口与工作计划程序进行通信。 |
|
计划程序用来与并发运行时的资源管理器进行通信以协商资源分配的接口。 |
|
执行线程的抽象。 根据您创建的计划程序的 SchedulerType 策略密钥,资源管理器将授予您由普通的 Win32 线程或用户模式计划 (UMS) 线程支持的线程代理。 UMS 线程在版本为 Windows 7 或更高版本的 64 位操作系统上支持。 |
|
表示 UMS 完成列表。 如果为 UMS 线程块,将分离计划程序指定的计划上下文,以决定初始线程阻塞时,在底层虚拟处理器根上计划什么。 如果初始线程未阻止,则操作系统会让之在完成列表中排队,该列表可以通过该接口访问。 计划程序可以在指定的计划上下文上或搜索工作的任意地方查询完成列表。 |
|
希望并发运行时资源管理器向其传递用户模式计划 (UMS) 线程的工作计划程序抽象的接口。 资源管理器使用该接口与 UMS 线程计划程序通信。 IUMSScheduler 接口从 IScheduler 接口继承。 |
|
执行线程的抽象。 如果要为计划程序授予用户模式可计划 (UMS) 线程,则将计划程序策略元素 SchedulerKind 的值设置为 UmsThreadDefault,并实现 IUMSScheduler 接口。 UMS 线程仅在版本为 Windows 7 或更高版本的 64 位操作系统上支持。 |
|
表示来自资源管理器的通知,说明阻塞并触发返回到计划程序的指定计划上下文的线程代理已解除阻塞,并已准备好进行计划。 一旦返回自 GetContext 方法的线程代理相关的执行上下文被重新计划,则该接口无效。 |
|
线程代理可在其中执行的硬件线程的抽象。 |
枚举
Name |
说明 |
---|---|
agent 的有效状态。 |
|
可以使用由并发运行时提供的跟踪功能要跟踪的事件类型。 |
|
上下文处于其中的关键区域类型。 |
|
由 DynamicProgressFeedback 策略用于描述计划程序的资源是否根据从计划程序收集的统计信息或只根据进出闲置状态的虚拟处理器来重新平衡,方法是通过在 IVirtualProcessorRoot 接口上调用 Activate 和 Deactivate 方法。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
|
join 消息块的类型。 |
|
message 对象到块的提供的有效响应。 |
|
描述计划程序行为各方面的策略键。 每个策略元素由键值对描述。 有关计划程序策略及其对计划程序的影响的详细信息,请参见任务计划程序(并发运行时)。 |
|
由 SchedulerKind 策略使用以描述应由计划程序用于基础执行上下文的线程类型。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
|
由 SchedulingProtocol 策略用于描述将那个计划算法计划程序。 有关可用计划程序策略的更多信息,请参见 PolicyElementKey 枚举。 |
|
用于表示线程代理执行到不同线程代理的协作性上下文切换时,线程代理所处状态。 |
|
描述 task_group 或 structured_task_group 对象的执行状态。 通过等待计划在任务组完成的任务的多种方法返回此类型的值。 |
函数
Name |
说明 |
---|---|
已重载。 异步发送操作计划任务从而将数据传播到目标块。 |
|
已重载。 从可选的 Scheduler 或 ScheduleGroup 及两个和十个输入源之间构造 choice 消息块。 |
|
已重载。 从可选的 Scheduler 或 ScheduleGroup 及两个和十个输入源之间构造 greedy multitype_join 消息块。 |
|
已重载。 从可选的 Scheduler 或 ScheduleGroup 及两个和十个输入源之间构造 non_greedy multitype_join 消息块。 |
|
用于创建 task_handle 对象的工厂方法。 |
|
已重载。 parallel_for 循环访问一个索引范围,并在每次迭代时以并行方式执行用户提供的函数。 |
|
parallel_for_each 以并行方式将指定函数应用于范围内的每个元素。 除了并行对元素执行迭代及迭代的顺序未指定,语义上等效于 for_each 命名空间中的 std 函数。 实参 _Func 必须支持窗体 operator()(T) 的函数调用运算符,其中形参 T 是正在进行迭代的容器的项类型。 |
|
已重载。 执行作为并行和块中的参数而提供的函数对象,直至其完成执行。 每个函数对象可以是 lambda 表达式、函数指针或支持带有签名 void operator()() 的函数调用运算符的任何对象。 |
|
已重载。 一般接收实现,允许上下文仅等待来自一个源的数据并筛选所接受的值。 |
|
已重载。 同步发送操作会一直等待,直到目标接受或拒绝消息。 |
|
交换两个 concurrent_vector 对象的元素。 |
|
已重载。 一般尝试接收实现,允许上下文仅查找<来自一个源的数据并筛选所接受的值。 如果数据未就绪,则该方法将返回 false。 |
运算符
Name |
说明 |
---|---|
测试运算符左侧的 concurrent_vector 对象是否不等于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否小于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否小于或等于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否等于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否大于右侧的 concurrent_vector 对象。 |
|
测试运算符左侧的 concurrent_vector 对象是否大于或等于右侧的 concurrent_vector 对象。 |
常量
Name |
说明 |
---|---|
一个类别 GUID,描述由与日常任务或任务直接相关的并发运行时激发的 ETW 事件。 |
|
并发运行时的 ETW 提供程序 GUID。 |
|
表示支持 Visual Studio 2010 中定义的资源管理器接口。 |
|
一个类别 GUID,描述由未通过其他类别更具体介绍的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与上下文直接相关的并发运行时激发的 ETW 事件。 |
|
表示等待永远不应超时的值。 |
|
表示等待超时的值。 |
|
策略键 ContextPriority 的特殊值,指示计划程序中所有上下文的线程优先级别都应与创建该计划程序的线程的优先级别相同。 |
|
一个类别 GUID,描述由与锁定直接相关的并发运行时激发的 ETW 事件。 |
|
策略键 MinConcurrency 和 MaxConcurrency 的特殊值。 默认值为没有其他约束的机器上的硬件线程数。 |
|
一个类别 GUID,描述由与 parallel_for_each 函数的用法直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与 parallel_for 函数的用法直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与 parallel_invoke 函数的用法直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与资源管理器直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与计划组直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与计划程序活动直接相关的并发运行时激发的 ETW 事件。 |
|
一个类别 GUID,描述由与虚拟处理器直接相关的并发运行时激发的 ETW 事件。 |
要求
Header: agents.h、concrt.h、concrtrm.h、concurrent_queue.h、concurrent_vector.h、ppl.h