gpt4 book ai didi

c++ - 有没有办法检查堆栈协程是否在给定链的上下文中?

转载 作者:行者123 更新时间:2023-11-30 02:42:58 25 4
gpt4 key购买 nike

给定一个 yield_context 对象 y , 和一根线 s ,有没有办法检查是否y表示 s 上下文中的协程还是不是?

最佳答案

给定 yield_contextstrand 对象,无法检测 yield_context 的执行器上下文是否是特定的 。但是,在协程的执行过程中,可以通过调用 strand::running_in_this_thread() 来检测当前协程的执行器上下文是否是特定的 strand .这是一个微妙的区别,但这是一个例子 demonstrating它的用法:

#include <cassert>
#include <boost/asio.hpp>
#include <boost/asio/spawn.hpp>

int main()
{
boost::asio::io_service io_service;
boost::asio::io_service::strand strand1(io_service);
boost::asio::io_service::strand strand2(io_service);
boost::asio::io_service::strand strand3(strand1);

boost::asio::spawn(strand1,
[&](boost::asio::yield_context yield)
{
assert(strand1.running_in_this_thread());
assert(!strand2.running_in_this_thread());
assert(strand3.running_in_this_thread());

// Access implementation details.
auto strand4 = yield.handler_.dispatcher_;
assert(strand4.running_in_this_thread());

// No way to compare strands to one another. Although strand1, strand3,
// and strand4 use the same strand implementation, the strand objects
// are neither identifiable nor comparable.
});

io_service.run();
}

无法检测yield_context 对象的执行器上下文是否为特定strand 对象的原因是strand API 既不提供执行识别也不提供比较的方法。在上面的示例中,虽然 strand1strand3strand4 指的是相同的 strand 实现,但唯一的方法是推断它们使用相同的实现是在其中一个链的执行上下文中检查每个链。此外,即使链具有可比性,支持的 API yield_context不公开协程的执行程序上下文。

关于c++ - 有没有办法检查堆栈协程是否在给定链的上下文中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26570120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com