私はオペレーティング システムの入門コースを受講しており、Linux で clone() 呼び出しを使用してスレッドを作成し、それらを使用して何かを行う予定です。clone() を使用するだけで問題が発生しているようです。
クラス ( Course )の名前空間にある単一のクラス ( Homeworkと呼ばれる) にコードを構造化しました。名前空間キーワードを実際に使用したのはこれが初めてであるため、これが問題になる可能性があります。めったにしないことを使って経験を積むようにしているので、ばかげた間違いがあったとしても、それでいいのです。
Web でいくつかの記事を見つけましたが、あまり役に立ちませんでした。man ページを読みましたが、問題が何であるかを理解するのに十分な経験がないと思います。いつか!助けてくれてありがとう:)
クラス内のクローンをキャッチするメソッドが必要です。
// -- Header -- //
namespace _Course_ {
class _Homework_ {
...
int threadCatch(void *);
...
};
}
// -- Source -- //
namespace _Course_ {
void _Homework_::threadTest(void) {
...
// From web article
void **childStack;
childStack = ( void **) malloc(KILOBYTE);
clone(threadCatch, childStack, CLONE_VM | CLONE_FILES, NULL);
...
}
int _Homework_::threadCatch(void * ){
cout << getpid() << " cloned." << endl;
exit(0);
}
}
私が現在持っているものです。私はさまざまな方法を試しました(クラスからキャッチャーを取り出し、次に名前空間を取り出します)。2 回コンパイルされますが、make clean 後に再コンパイルしようとすると、関数 (threadCreate) が複数の場所で宣言されていることがわかります。これらの奇妙なエラーのために、私は何か間違ったことをしていると確信しています。何をすべきか、次に何を読むべきか? ありがとう!