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

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

class strand
{//返回contextexecution_context& context() const BOOST_ASIO_NOEXCEPT{return executor_.context();}//要求异步执行一个handlertemplate <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总结(7)class strand相关推荐

  1. 【Boost】boost库asio详解2——strand与io_service区别

    [cpp] view plain copy  print? namespace { // strand提供串行执行, 能够保证线程安全, 同时被post或dispatch的方法, 不会被并发的执行. ...

  2. boost asio io_service与 strand 分析

    1: io_service 与 strand 的关系是什么? 2: strand : /// Provides serialised handler execution. 能够保证线程安全,同时被po ...

  3. 【Boost】boost库asio详解1——strand与io_service区别

    namespace {// strand提供串行执行, 能够保证线程安全, 同时被post或dispatch的方法, 不会被并发的执行. // io_service不能保证线程安全boost::asi ...

  4. Boost asio学习笔记之一—— 使用strand支持多线程调用service_io的方法

    asio是一个跨平台的网络库,可以作为boost的一部分,也可以使用独立的asio部分.这里记录学习的笔记,作为参考. 感觉asio的关键就是io_service对象.所有的异步同步都跟这个有关.多线 ...

  5. boost asio io_service学习笔记

    转自:http://hi.baidu.com/jrckkyy/blog/item/e86835d61e60722506088b6a.html 构造函数 构造函数的主要动作就是调用CreateIoCom ...

  6. Boost asio 定时器

    Boost asio入门学习笔记 版权声明:本文为博主原创文章,未经博主允许不得转载.文章中有连接失效或是技术谬误的地方,请与我联系. https://blog.csdn.net/luchengtao ...

  7. boost::asio译文

    boost::asio译文 Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布( ...

  8. Boost.Asio技术文档汇总

    Christopher Kohlhoff Copyright © 2003-2012 Christopher M. Kohlhoff 以Boost1.0的软件授权进行发布(见附带的LICENSE_1_ ...

  9. Boost.ASIO简要分析-4 多线程

    4. 多线程 一般情况下,服务端开启一条线程做io_service::run()工作就足够了.但是,有些情况下可能会变得很糟糕. 从之前的分析,我们知道异步操作的一个关键步骤就是io_service回 ...

  10. boost.asio无锁异步并发

    简介 给出一个不安全的情况,假设我们有一个socket用于和用户通信,用户会发送多个请求,我们处理请求需要一定的时间,同时使用异步并发的模型来处理对应的请求,即一个io_context::run会有多 ...

最新文章

  1. 转载:网站取得定向流量的三种方式
  2. nodejs ejs模版 layout使用 注意点
  3. ML之二分类预测:以岩石水雷数据集(RockMine)为例从0到1深入理解科学预测之分类问题的思路框架(特征工程详细步骤(特征分析与特征处理)+分类模型设计)
  4. vs+opencv编译出现内存问题
  5. Taro+react开发(52) 移动端弹出框使用
  6. PointNet:3D点集分类与分割深度学习模型
  7. 看完白鹤滩水电站建造历程 感觉《流浪地球》那些真能造出来
  8. 今天终于完成对postfix配置的修改
  9. python3 重写、重用、重载
  10. HTML5物流大数据服务平台后台模板
  11. 牛顿迭代法(求平方根)
  12. [科普] 狭义相对论
  13. 同步六进制加法计数电路设计(D触发器)
  14. C++服务器(一):了解Linux下socket编程
  15. 并发编程(五)——生产者消费者模式
  16. 电灯开关-第12届蓝桥杯Scratch省赛2真题第1题
  17. 如何分别在Android、iOS、Windows Phone三大平台进行“触摸屏”开发?
  18. 「DaoCloud道客」全新 IT 交付:服务化 + 标准化 = 一致的自助式服务体验
  19. 企业不懂如何选择低代码平台?看看这20家优秀的厂商
  20. python turtle库seth_Python学习笔记_3 turtle库使用

热门文章

  1. GCC : 什么是编译?什么是静态库?什么是动态库?怎么生成?优先级?
  2. 行为型模式:责任链模式
  3. centos下yum安装nginx
  4. 第十一届青少年蓝桥杯国赛真题精选 - 编程题
  5. 2019中国大学生程序设计竞赛(CCPC)-网络选拔赛-第七题Shuffle Card
  6. vue的post请求data可以传两个参吗_我知道的HTTP请求
  7. php职能等级,php如何设置报错级别
  8. 电脑显示器变色_流光溢彩电竞出击:飞利浦猛腾M1系列电竞显示器275M1RZ
  9. VS2019 配色_NBA球员上脚:基德穿AJ13湖人配色,莫兰特的保罗乔治4代!
  10. 数据中心智慧机房解决方案