我正在寻找类似于线程局部变量的东西,但是对于 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_context
和 the_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)。
关于c++ - boost 中的协程局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32380537/