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) 上是不是损坏
asio::strand<asio::io_context::executor_type> vs io_context::strand