2016-03-22 3 views
1

Wie diese zwei (setcontext, Continuation) Konzepte zueinander in Beziehung stehen? Erstellen wir eine Instanz einer Fortsetzung, wenn Sie eine setcontext Technik verwenden?Ist setcontext-Funktionen in C eine Fortsetzung?

+0

Ich wäre versucht zu antworten, dass der Unterschied einfach den verschiedenen Philosophien zwischen funktionaler und prozeduraler Programmierung entspricht: 'setcontext' speichert lokale Daten, weil prozedurale Programme beliebige explizite lokale Daten haben, während Fortsetzungen keine Daten haben sollen weil funktionale Programmierung ist was zu tun ist, nicht wie es geht. Der Punkt ist also, dass Sie durch etwas hindurchgehen, was zu tun ist - was auch immer der Computer dabei angefallen hat, wird wahrscheinlich gespeichert, ist aber nicht semantisch relevant. Aber mein Wissensstand reicht nicht aus, um mich darauf als Antwort zu verlassen. – Tommy

Antwort

1

Das ucontext_t Objekt, das Sie über getcontext() initialisieren, makecontext() oder swapcontext() bewahrt den Stapel und CPU-Zustand - aber nicht der Heap - in einer Weise, die später über setcontext() oder swapcontext() aktiviert werden kann. Dies ist ähnlich einer Fortsetzung.

Das Subsystem scheint nicht mit der Idee entworfen worden zu sein, Fortsetzungen als solche zu implementieren, aber mehr als eine Verbesserung gegenüber sigsetjmp() und siglongjmp(). Kontexte erfassen insbesondere eine Signalmaske, die wiederhergestellt wird, wenn der Kontext aktiviert wird. Jeder Kontext behält auch einen Sinn für einen Kontext bei, der fortgesetzt wird, wenn der aktuelle Kontext endet. In diesem Sinne können Kontexte als von reinen Fortsetzungen abweichend angesehen werden.

Beachten Sie, dass , und sind jetzt alle von POSIX veraltet, für Code einen gültigen Kontext zu erhalten Benutzer keine direkte, nicht veraltet Art und Weise zu verlassen. Ein Signalhandler mit drei Argumenten erhält immer noch eins als drittes Argument, aber es ist ziemlich nutzlos, da der Effekt der Fortsetzung dieses Kontexts absichtlich in den neueren Versionen von SuS/POSIX nicht spezifiziert ist.

Verwandte Themen