Boost Asio总结class strand

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Boost Asio总结class strand相关的知识,希望对你有一定的参考价值。

strand 保证异步代码在多线程环境中正确执行,无须使用互斥量,好比一组handler的锁,加入线程保护,保证handler不会存在线程并发访问。

多个线程使用io_service需要strand保证线程安全。

class strand

//返回context
  execution_context& context() const BOOST_ASIO_NOEXCEPT
  
    return executor_.context();
  

//要求异步执行一个handler
  template <typename Function, typename Allocator>
  void dispatch(BOOST_ASIO_MOVE_ARG(Function) f, const Allocator& a) const
  
    detail::strand_executor_service::dispatch(impl_,
        executor_, BOOST_ASIO_MOVE_CAST(Function)(f), a);
  

//要求异步执行一个handler
  /// Request the strand to invoke the given function object. 
  template <typename Function, typename Allocator>
  void post(BOOST_ASIO_MOVE_ARG(Function) f, const Allocator& a) const
  
    detail::strand_executor_service::post(impl_,
        executor_, BOOST_ASIO_MOVE_CAST(Function)(f), a);
  


  bool running_in_this_thread() const BOOST_ASIO_NOEXCEPT
  
    return detail::strand_executor_service::running_in_this_thread(impl_);
  

以上是关于Boost Asio总结class strand的主要内容,如果未能解决你的问题,请参考以下文章

boost::asio: “strand”类型的同步原语有啥名字吗?

为啥在使用 boost::asio 时每个连接都需要 strand?

boost::asio::strand 在 Ubuntu 11.04 (boost_all_dev 1.42) 上是不是损坏

boost.asio中使用协程

Boost.Asio 的同步和并发数据结构模式

asio::strand<asio::io_context::executor_type> vs io_context::strand