Im folgenden Code erwarte ich, dass die Ausgabe immer 1 ist, weil ich erwarte, dass nur ein Handler ausgeführt wird, wenn poll_one()
aufgerufen wird. Jedoch, einmal in etwa 300 mal, ist die Ausgabe tatsächlich 3. Basierend auf meinem Verständnis der Boost-Bibliothek scheint dies falsch. Ist das nicht-deterministische Verhalten ein Fehler oder erwartet?io_service :: poll_one nicht-deterministisches Verhalten
#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;
}
Mit Boost-Asio 1.60.0.6
Warum werden Sie abgelehnt? Antwort geschätzt –
Natürlich ist es vollständig minimal und überprüfbar und leicht zu kompilieren. Ausnahmen werden nicht ausgelöst. –
Wenn Sie die Anzahl der Fälle von 3 auf 2 reduzieren, wird das Problem nicht angezeigt. –