2017-12-23 6 views

Antwort

1

boost.fiber ist std :: threads API nachgebildet - keine Interrupt-Funktion und keine zeitgesteuerte Verbindung.

Sie können eine Faser nicht serialisieren, da dies bedeuten würde, den Stapel der Faser zu serialisieren, was nicht möglich ist ... zumindest nicht ohne Compiler-Unterstützung.

Stack-Serilisierung wird nicht empfohlen, da der Compiler sich um Zeiger auf Objekte kümmern müsste, die auf dem Stack zugewiesen sind, z. Die Objekte müssen an den gleichen Adressen neu zugewiesen werden oder der Zeiger muss nach dem Deserialisieren der Faser neu geschrieben werden (Neuladen).

RAII Verletzungen werden leicht möglich sein etc ...

+0

Ich stimme nicht mit Ihrer Meinung. 1) um ein sehr fortgeschrittenes Fasermodell zu schaffen, kann man erlauben, die gleiche Bibliothek auf OS-Ebene oder sehr niedriger Ebene zu verwenden: dies hilft, alle tatsächlichen Probleme zu lösen, die mit Inkompatibilitäten der Sprachen mit Fasern und Interoperabilität zusammenhängen. 2) Die Serialisierung findet statt, kurz bevor der Faserstatus aus dem Thread entfernt wird, so dass Sie nicht die absoluten Zeigeradressen, sondern nur die relativen Offsets im Speicher speichern müssen. Sie können einen serialisierten tragbaren Status erstellen. Wenn du willst, kannst du es tun. Es ist nicht unmöglich. Der Vorteil ist beeindruckend. –

+0

C++ 11 nicht std :: Thread-Unterbrechung bieten, rate warum ... Serialisierung des Stapels würde die Tür für die Verletzung der RAII öffnen. – xlrg

+0

Ja, aus diesem Grund kann die Faser nicht innerhalb des Compilers, sondern innerhalb des Betriebssystems erstellt werden. Weil es das Verletzungsproblem löst, aber die Tür zu einer Welt der Möglichkeiten öffnet. Aus diesem Grund ist die Art und Weise, wie man eine Faser in der Sprache erstellt, nicht der bessere Weg: weil es die Möglichkeiten der Fasern einschränkt (Serialisierung, Taskmigration, ....) Der Compiler kann schließlich eine 2-Level-Serialisierung durchführen, die Datentypen beschreibt , .... –

Verwandte Themen