在下面的代码中,我期望输出始终为1,因为我期望调用poll_one()
时只有一个处理程序运行。然而,一次约300次,输出实际上是3.根据我对boost库的理解,这看起来不正确。非确定性行为是错误还是预期?io_service :: poll_one非确定性行为
#include <boost/asio.hpp>
int main() {
boost::asio::io_service io;
boost::asio::io_service::work io_work(io);
boost::asio::io_service::strand strand1(io);
boost::asio::io_service::strand strand2(io);
int val = 0;
strand1.post([&val, &strand2]() {
val = 1;
strand2.post([&val]() {
val = 2;
});
boost::asio::spawn(strand2, [&val](boost::asio::yield_context yield) {
val = 3;
});
});
io.poll_one();
std::cout << "Last executed: " << val << std::endl;
return 0;
}
使用升压ASIO 1.60.0.6
为什么要downvote?回答赞赏 –
当然,它是完整的最小和可验证,并易于编译。异常不会抛出。 –
如果您将案例数量从3个减少到2个,问题不会出现 –