問題タブ [ucontext]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ユーザーレベルのスレッド実装での ucontext.h の使用に関するスレッド切り替えの問題
最近、ucontext で実装されたユーザーレベルのスレッドを見ましたが、スレッドがどのように切り替わるのかわかりません。上記のコードでは、これが機能した後、 ratherswapcontext
のコンテキストは?内にある必要があります。しかし、コンテキストは lastID ブレークポイントを持つスレッドにあります。に保存された「現在のコンテキスト」が現在の関数内のコンテキストではなく、古いスレッドのコンテキストであることは非常に混乱しています。コード全体はhttps://github.com/Miaoshuai/CoroutineにありますthreadMap_[lastId].get()
threadSchedule
swapcontext(ucontext_t *oucp, ucontext_t *ucp)
oucp
threadSchedule(int n)
c - 終了時に ucontext から戻り値を取得する
を使用してユーザーレベルのスレッド lib を実装していますucontext_t
。を介してスレッドをスケジューラ スレッドにリンクしていますuc_link
が、場合によっては戻り値を取得する必要があります。コンテキストが分かれているため、戻り値を取得する方法がわかりません。戻り値にアクセスする唯一の方法は、何らかの方法でそのコンテキストのスタックに移動し、戻り値がどこにあるかを見つけることです。ただし、これは災害と奇妙なエラーの公式のようです。