io_context并发提示(BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO)

时间:2018-03-13 22:22:46

标签: c++ boost boost-asio

虽然在verion 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是否安全。

1 个答案:

答案 0 :(得分:1)

boost::asio::dispatch¹ends up calling io_context::dispatch以后,如果您从另一个帖子中调用它,我会认为使用BOOST_ASIO_CONCURRENCY_HINT_UNSAFE_IO不正常

  

- 必须注意确保io_context上的运行函数以及上下文关联的I / O对象(例如套接字和定时器)上的所有操作一次只出现在一个线程中。

¹相同的邮寄/延期