c++ - boost 中的协程局部变量

标签 c++ boost boost-asio boost-context boost-coroutine

我正在寻找类似于线程局部变量的东西,但是对于 boost::corotine (实际上我使用 boost:asio::spawn )。考虑以下代码:

void coroutine_work(boost::asio::yield_context yield) {
    async_foo( yield );
    some_function();
}
void some_function() {
    fprintf(log_fd, "%s Some function called", the_magic_request_id);
}

我想在初始化请求时将此 the_magic_request_id 设置为某个值,该值将类似于“当前请求 ID”。

如果没有这个,我必须将 the_magic_request_id 传递给每个函数和每个登录项目的模块。 some_function 只是一个例子,实际上我有很多类,它们做不同的工作,但它们都需要 yield_contextthe_magic_request_id 才能创建一个实例。我想简化这些类的接口(interface)。

可能可以设置“on_sleep”和“on_resume” Hook ,这将设置一个全局变量?或者 boost::coroutine 已经为此提供了一些现成的用户机制?在文档中没有找到可用的东西。

最佳答案

除了使用 boost.coroutine (boost::asio::yield_context) 之外,你还可以使用 boost. Fiber (用户态线程,boost::carbons::asio::yield_context)。 boost. Fiber 支持 Fiber_Specific_ptr (相当于 boost.thread 的 thread_Specific_ptr)。

文档:http://olk.github.io/libs/fiber/doc/html/index.html

关于c++ - boost 中的协程局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380537/

相关文章:

c++ - 不识别键盘输入

c++ - 如何创建用于加密的自定义 ofstream 类

c++ - 构建 Boost 1.49.0 时出现 fatal error C1027

c++ - 使用 Boost::asio::async_send_to 发送加密数据时出错

c++ - 将 asio 缓冲区 boost 为数据

c++ - 使用相同的对象来比较彼此的 vector

c++ - 如何解决警告 C4333 ('>>' : right shift by too large amount, 数据丢失)

c++ - 在 vf2_sub_graph_iso 中使用属性映射进行等价

c++ - 为什么 uBLAS 没有 `operator*(matrix, vector)` ?

c++ - 错误: ‘io_context’不是 ‘boost::asio’的成员,错误: ‘steady_timer’不是 ‘boost::asio’的成员