虽然在verion 1.66.0中检查了boost :: asio的文档,但我注意到io_context构造函数提供了一个concurrency_hint
参数。阅读完文档后,我不确定是否可以使用BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO
。
我有以下情况:
io_context
来做IO。 ioc.run()
是从单个线程执行的。boost::asio::dispatch(ioc, ...)
来执行IO线程上的代码。我正试图找出在上述情况下可以安全使用的concurrency hint值:
BOOST_ASIO_CONCURRENCY_HINT_SAFE
),但比提示慢。1
即可。BOOST_ASIO_CONCURRENCY_HINT_UNSAFE
不行,因为它不允许异步调用。我不清楚的是BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO
。文档说:
此特殊并发提示禁用反应堆I / O中的锁定。此提示具有以下限制:
- 必须注意确保io_context上的运行函数以及上下文关联的I / O对象(例如套接字和定时器)上的所有操作一次只出现在一个线程中。
我想知道在使用这个并发提示时,从另一个线程做boost::asio::dispatch
是否安全。
答案 0 :(得分:1)
自boost::asio::dispatch
¹ends up calling io_context::dispatch
以后,如果您从另一个帖子中调用它,我会认为使用BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO
是不正常:
- 必须注意确保io_context上的运行函数以及上下文关联的I / O对象(例如套接字和定时器)上的所有操作一次只出现在一个线程中。
¹相同的邮寄/延期