我正在介紹操作系統課程,我們將在linux中使用clone()調用來創建線程,然後使用它們做一些事情。我似乎只是在使用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);
}
}
是什麼我現在有。我嘗試了不同的方式(將捕手從課程中取出,然後命名空間)。它被編譯了兩次,但是當我嘗試在make clean之後重新編譯時,它告訴我函數(threadCreate)在多個位置聲明。由於這些奇怪的錯誤,我敢肯定我做錯了什麼,而不是對它進行破解,我會採取一些意見。我該怎麼做,或者我應該接下來閱讀什麼?謝謝!
只需在問題編輯器中選擇您的代碼並單擊「{}」按鈕即可獲得自動代碼格式化。不需要通過標記爲粗體或斜體。 – 2011-02-09 20:59:35
混合使用C++類和`clone`聽起來像一個可怕的想法。自己使用clone(而不是`pthread_create`)本身已經是一個足夠糟糕的主意了,除非你正在重新實現pthreads ... – 2011-02-09 21:01:11
從C++類中調用clone()是沒有問題的,函數的指針都是這是必要的。我同意,在製作線程應用程序時,clone()不應該是您的首選,posix線程更好,並且更便於攜帶。也就是說,我懷疑這個教師是從clone()開始的,稍後會移動到pthread。從克隆開始,讓學生了解pthread及其相對於克隆的優勢。 – 2011-02-09 21:10:27