【问题标题】:Does boost asio io_service guarantee execution of two parallel call chains?boost asio io_service 是否保证两个并行调用链的执行?
【发布时间】:2015-01-01 17:52:28
【问题描述】:

在我的程序中,使用 boost asio io_service,我想要两个并行的调用链。两个无限循环写入和读取两个 USB 端口。但是 boost asio io_service 能保证两个并行调用链的执行吗?看看这个最小的例子:

#include <boost/asio/io_service.hpp>
#include <functional>

class Chain
{
public:
    Chain(boost::asio::io_service &io_service, const std::string &message)
        : io_service(io_service)
        , message(message)
    {}

    void call()
    {
        std::cout << message << std::endl;
        io_service.post(std::bind(&Chain::call, this));
    }

private:
    boost::asio::io_service &io_service;
    std::string message;
};

int main()
{
    boost::asio::io_service io_service;

    Chain chain1(io_service, "1");
    Chain chain2(io_service, "2");

    chain1.call();
    chain2.call();

    io_service.run();

    return 0;
}

打印出来

1
2
1
2
1
...

因为当前的 io_service 实现是 fifo 调度程序。是不是保证以后不打印了

1
1
1
1
1
...

?

【问题讨论】:

    标签: c++ boost boost-asio


    【解决方案1】:

    io_service 目前不保证处理程序的调用顺序。因此,io_service 可以选择仅调用单个调用链。目前,只有strand 指定保证。

    话虽如此,我不会太担心io_service 目前没有做出保证。由于 Asio 是on track of becoming the standard networking library,可以想象在整个规范过程中都会定义处理程序调度。特别是,io_service 对提议的执行器和调度器的使用应该为调度行为及其选项提供具体的保证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2016-01-07
      • 1970-01-01
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多