【发布时间】:2018-03-13 22:22:45
【问题描述】:
在查看 1.66.0 版本中 boost::asio 的文档时,我注意到 io_context 构造函数提供了一个 concurrency_hint 参数。阅读文档后,我不确定是否可以使用BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO。
我有以下情况:
- 我有一个
io_context来执行 IO。ioc.run()从单个线程执行。 - 在此线程中,执行了一些使用异步调用的网络 IO。
- 其他线程调用
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 是否安全。
【问题讨论】:
标签: c++ boost boost-asio