zoukankan      html  css  js  c++  java
  • 在不使用显式锁的方式下使用多线程

    一个串被定义为序列的调用事件句柄(非并行调用),使用串允许在多线程环境中执行代码而不使用显示的互斥锁。
    串可以是隐式的或者显式的,如下方的可替代方法所示:
    仅在一个线程中调用io_service::run()意味着使用隐式的串执行所有的事件句柄,因为io_service确保了句柄只被run()内部调用。
    当有一个只和一个连接关联的异步操作链时(比如半双工的协议HTTP),不可能并发的执行句柄,这是一个隐式的串。
    显式的串调用是一个io_service::strand的实例,所有的事件句柄函数需要使用io_service::strand::wrap()包装,或者通过io_service::strand对象进行通告、发送。
    如果是异步操作,比如async_read()或者async_read_until(),如果一个完成句柄通过一个strand,所有其他的中间句柄也都需要通过同一个串,这是为了保证在调用者和完成操作之间共享的对象的线程安全(在async_read() 的情况下是socket,调用者可以通过close来关闭操作),这是通过给所有指向同最终句柄关联的自定义句柄的中间对象嵌入hook函数来完成的。
    struct my_handler
    {
      void operator()() { ... }
    };
    template<class F>
    void asio_handler_invoke(F f, my_handler*)
    {
      // Do custom invocation here.
      // Default implementation calls f();
    }
      
    io_service::strand::wrap() 创建了一个定义了 asio_handler_invoke 的新完成句柄,以便函数对象通过strand来执行。
    串的英文为strand。
  • 相关阅读:
    Redis的各种用途以及使用场景【转】
    Cron表达式
    容器绑固定物理核
    【转】Kubernetes和Docker到底有啥关系?
    memtier_benchmark安装
    压测工具
    Linux下traceroute的安装和使用
    计算机科学自学指南
    配置服务器SSH PAM防止暴力破解
    How to Enable or Disable Check for Windows Updates/Check For Updates Greyed Out
  • 原文地址:https://www.cnblogs.com/learn-my-life/p/5270908.html
Copyright © 2011-2022 走看看