1

pthreads のようなユーザー レベルのスレッド ライブラリを作成しようとしています。私はmakecontext() / swapcontext()を使用してスレッド間の切り替えを行い、スレッドのコンテキストを作成しながら、コンテキストのuc_linkフィールドにuctx_mainを渡しています。

context.uc_stack.ss_sp = thread->c_stack;
context.uc_stack.ss_size = sizeof(thread->c_stack);
context.uc_link = &uctx_main;

ただし、スレッドが終了すると、セグメンテーション違反が発生します。私のメインプログラムはまだ実行中です。

また、誰かがuctx_mainとは何かを説明できますか? メイン関数のデフォルトのコンテキストですか? 作成するスレッドごとにuctx_mainが必要ですか? このようなばかげた質問をして申し訳ありませんが、ググっても何も見つかりませんでした。

4

1 に答える 1

1

への参照から、 Linux man ページuctx_mainの の例に従っていると思います。makecontext()

その例でuctx_mainは、 はメイン スレッドのコンテキストであり、setcontext()switch to を呼び出すときに設定されuctx_func2ます。

uctx_mainは、メイン スレッドから設定されていること (およびuctx_func1例では の後継として設定されていること) を除いて、特別なものではありません。

一般に、作成するすべてのスレッドにはコンテキストが必要です。

于 2013-01-29T09:51:25.483 に答える