我正在开发一个跨不同线程利用 boost::asio::io_context 的项目,具体来说,我想使用 co_spawn 来启动协程。这是一个简化的代码片段:
#include <boost/asio.hpp>
#include <boost/asio/co_spawn.hpp>
#include <boost/asio/detached.hpp>
#include <thread>
boost::asio::awaitable<void> my_coroutine() { /* ... */ }
void worker_thread(boost::asio::io_context& io)
{
boost::asio::co_spawn(io, my_coroutine, boost::asio::detached);
}
int main()
{
boost::asio::io_context io;
std::thread main_thread([&io](){ io.run(); });
std::thread worker_thread(worker_thread, std::ref(io));
main_thread.join();
worker_thread.join();
return 0;
}
我有两个不确定的问题:
这样安全吗?如果以这种方式跨不同线程使用 io_context,我能否确定此代码不会出现并发访问问题?
是否保证在同一个线程上执行?是否可以保证 co_spawn 启动的协程将与 io_context 在同一线程上运行,或者是否存在在不同线程上调用它的风险?