boost asio io_service是否保证执行两个并行调用链?

时间:2015-01-01 17:52:29

标签: c++ boost boost-asio

在我的程序中,使用boost asio io_service,我希望有两个并行的调用链。两个无限循环写入和读取到两个USB端口。但是,增强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
...

1 个答案:

答案 0 :(得分:3)

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

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