...one of the most highly regarded and expertly designed C++ library projects in the world.
— Herb Sutter 和 Andrei Alexandrescu, C++ Coding Standards
提供串行化的处理程序执行。
class strand
名称 |
描述 |
---|---|
获取底层执行上下文。 |
|
请求 strand 调用给定的函数对象。 |
|
请求 strand 调用给定的函数对象。 |
|
告知 strand 某些工作不再挂起。 |
|
告知 strand 它有一些待完成的工作。 |
|
请求 strand 调用给定的函数对象。 |
|
确定 strand 是否在当前线程中运行。 |
|
strand [构造函数] |
构造函数。 |
(已弃用:请使用 boost::asio::bind_executor()。) 创建一个新的处理程序,该处理程序自动在 strand 上分派包装的处理程序。 |
|
~strand [析构函数] |
析构函数。 |
名称 |
描述 |
---|---|
比较两个 strand 是否不相等。 |
|
比较两个 strand 是否相等。 |
io_context::strand
类提供了发布和分派处理程序的能力,并保证这些处理程序都不会并发执行。
给定
s
a
a1
,它是实现所做的 a
的任意副本b
b1
,它是实现所做的 b
的任意副本如果以下任何条件为真
s.post(a)
先于 s.post(b)
发生s.post(a)
先于 s.dispatch(b)
发生,后者在 strand 外部执行s.dispatch(a)
先于 s.post(b)
发生,前者在 strand 外部执行s.dispatch(a)
先于 s.dispatch(b)
发生,两者都在 strand 外部执行则 a()
先于 b()
发生
请注意在以下情况中
async_op_1(..., s.wrap(a)); async_op_2(..., s.wrap(b));
第一个异步操作的完成将执行 s.dispatch(a)
,第二个异步操作的完成将执行 s.dispatch(b)
,但执行它们的顺序是未指定的。也就是说,您无法说明一个是否先于另一个发生。因此,以上任何条件均不满足,并且不提供排序保证。
该实现不保证通过不同的 strand
对象发布或分派的处理程序将并发调用。
不同的 对象: 安全。
共享 对象: 安全。
头文件: boost/asio/io_context_strand.hpp
便利头文件: boost/asio.hpp