私はオペレーティングシステムコースの紹介をしています。私たちはLinuxでclone()呼び出しを使ってスレッドを作成してから、いくつかのことをします。私はちょうどクローン()を使うだけで問題があるようです。クラスと名前空間の中でlinuxでどのようにクローン()をしますか?
私はクラス(コース)の名前空間である(宿題と呼ばれる)単一のクラスに私のコードを構造化しました。これは私が実際にnamespaceキーワードを使用した初めてのので、これが問題になる可能性があります。私はめったにそれを経験しないようにすることをめざしているので、私が間違ったミスを犯すならば、それをしてください。
ウェブ上でいくつかの記事を見つけましたが、あまり役に立たなかったです。私はマニュアルページを読んだことがありますが、問題の内容を理解するのに十分な経験はないと思います。ある日!どのような援助:)
ためのおかげで、私はクラス内のクローンをキャッチする方法を持つようにしたい:
// -- 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)が複数の場所で宣言されていることがわかります。これらの奇妙なエラーのため、私は何か間違ったことをしていると確信して、それをハックするのではなく、私はいくつかの意見を取ります。私は何をしなければならないのですか。ありがとう!
質問エディタでコードを選択して "{}"ボタンをクリックするだけで、自動的にコードを書式設定できます。行く必要はありませんし、太字やイタリック体としてマークしてください。 –
C++クラスと 'clone'を混ぜるのは恐ろしい考えです。 'pthread_create'ではなく' clone'を使うと、pthreadを再実装しない限り、すでにそれ自体が悪い考えです。 –
C++クラスの中からclone()を呼び出しても問題ありません。関数へのポインタはすべてですそれが必要です。私は同意します。クローン()は、スレッド化されたアプリケーションを作成するときには最初の選択ではないはずです。それは、私はこのインストラクターがクローンで始まっていると思うし()、後でpthreadsに移動します。クローンから始めて、クローンよりもpthreadとその利点を理解するための基礎を学生に与えます。 –