在下面的代碼中,我期望輸出始終爲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個,問題不會出現 –