2016-03-22 8 views
1

これらの2つの概念(「setcontext」、「Continuation」)は互いにどのように関係していますか? setcontextテクニックを使用する場合、継続のインスタンスを作成しますか?ではなく、ヒープ - - 後でsetcontext()swapcontext()経由で起動することができる方法でC内のsetcontext関数ファミリは継続していますか?

+0

私は、機能的プログラミングと手続き型プログラミングの違いは単純に違います。プロシージャプログラムは任意の明示的なローカルデータを持っているので、 'setcontext'はローカルデータを保存しますが、継続はデータを持たないと言われます。なぜなら、関数型プログラミングはそれを行う方法ではなく、何をするのかということなのです。つまり、何をすべきかを途中でやっているということです。コンピュータがそれを実行する際に発生したものは、おそらく格納されていますが、意味的には意味がありません。しかし、私の知識の程度は、私が答えとしてこれを確信するには不十分です。 – Tommy

答えて

1

あなたがgetcontext()makecontext()、またはswapcontext()を経由して初期化しucontext_tオブジェクトがスタックとCPUの状態を保持します。これは継続と同様です。

サブシステムは、継続を実装するという考え方で設計されていないようですが、sigsetjmp()siglongjmp()の改善点として設計されているようです。特に、コンテキストはシグナルマスクを取得し、コンテキストがアクティブになると復元されます。各コンテキストはまた、現在のコンテキストが終了したときに再開されるコンテキストの感覚を維持する。これらの感覚では、文脈は純粋な継続とは異なると考えられるかもしれない。

getcontext() 2、およびが現在あるすべての有効なコンテキストを取得するためにユーザコードには直接、非廃止予定の方法を残さない、POSIXによって非難ことに留意されたいです。 3引数のシグナルハンドラはまだ3番目の引数として1つを取得しますが、SuS/POSIXの最近のバージョンでは、そのコンテキストを再開するという効果が意図的に指定されていないため、かなり無駄です。

関連する問題