Gibt es eine Möglichkeit, thread-sichere Coroutinen zusammen mit boost :: asio zu haben?
Ich möchte, dass ein io_service
auf mehreren Threads läuft und einige meiner Handler Coroutinen haben.
Boost.Coroutine scheint eine Lösung zu sein, aber sie dokument , dass sie das Fortsetzen einer Coroutine, die in einem separaten Thread gestartet wurde, nicht unterstützen.
Soweit ich weiß, gibt es nur zwei mögliche Lösungen für dieses Problem:
Beide sind in keiner Weise gute Lösungen. In einer Lösung verliere ich Koroutinen. In der anderen verliere ich die meisten meiner Multithreading-Fähigkeit.
Es scheint, dass dieses Problem keine einfache Lösung hat.
Das Hauptfehlerproblem ist wahrscheinlich auf die Tatsache zurückzuführen, dass C ++ es Compilern erlaubt, den Großteil dessen, was in einer Funktion passiert, neu zu ordnen. Somit kann man nicht zuverlässig auf die Reihenfolge der Dinge in den Funktionen angewiesen sein.
Es sieht so aus, als müsste ich am Ende eine Reihe von Callbacks verwenden, möglicherweise mit Lambdas, wenn ich den Wunsch haben möchte, dass alles semantisch wie ein Codeblock aussieht.
Vielleicht kann ich sogar etwas hacken, indem ich Makros verwende, die zu Lambda-Gleichungen aufgelöst werden, um den Koroutinenstil zu simulieren.
Tags und Links c++ boost-asio coroutine