我正在介绍操作系统课程,我们将在linux中使用clone()调用来创建线程,然后用它们做一些事情。我似乎在使用clone()时遇到了麻烦。
我已将我的代码组织成一个类(称为 Homework ),该类位于类的名称空间中( Course )。这可能是问题,因为这是我第一次真正使用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)在多个位置声明。由于这些奇怪的错误,我确信我做错了什么,而不是黑客,我会采取一些意见。我该怎么做,或接下来应该阅读什么?谢谢!
答案 0 :(得分:1)
将catch函数定义为静态类函数。
static int threadCatch(void *);
另外(你可能不需要这个,但以防万一,我会在这里说)你可能还需要使用范围解析运算符将它发送到clone()。我不这么认为,因为你已经在家庭作业课中使用它了。但我说的是以防万一,它可能对你有所帮助。
clone(Homework::threadCatch, childStack, CLONE_VM | CLONE_FILES, NULL);
答案 1 :(得分:1)