私はユーザースペースのスレッドライブラリを書いています。各スレッドを管理する構造体があります。私のスレッドは非常に単純で、関数ptrとその引数を取り、その関数を1回実行するだけです。
各スレッドにはjmp_bufがあり、setjmpとlongjmpを使用してスレッドを切り替えます。私が理解できないことの1つは、この関数がいつ終了したかを知る方法です。
スレッドごとに、2つの方法でjmpbufを変更します。
- PCを編集して関数ポインタに設定したので、次にプログラムカウンターがそこに行きます。
- また、それぞれに独自のスタックを作成し、そのスタックを指すようにSPを編集します
したがって、スレッド制御構造体を使用して、スレッドを切り替え、各スレッドに状態を維持させることができますが、その関数がいつ終了したかを知る方法がわかりません。それが終わったら、私が持っている特別なexit()関数を呼び出したいと思います。