【发布时间】:2020-04-28 20:26:33
【问题描述】:
我有一个如下所示的课程:
class MyThread{
private:
pid_t pid;
size_t stack_size;
char* child_stack;
void* child_stack_end;
public:
// --methods--
MyThread(std::function<int(void*)> const& fun) {
stack_size = 1024*10;
child_stack = new char[stack_size];
child_stack_end = child_stack + stack_size;
int (*const* ptr)(void*) = fun.target<int(*)(void*)>();
pid = clone(*ptr, child_stack_end, CLONE_VM |
CLONE_FS | CLONE_FILES | CLONE_SIGHAND | SIGCHLD, 0);
}
}
我想用我的合并排序函数和 lambda 来测试它(不是创建 MyThread 类的构造函数,巫婆将 merge_sort_thread 函数的参数 + clone() 需要 int(*)(void*) 函数作为 1 个参数):
MyThread([first, center](void* arg){
return merge_sort_thread(first, center);
});
然后我尝试这段代码,它返回 SIGSEGV。 我检查了 GDB,变量 ptr 等于 0x0。 我该如何解决这个问题?
合并排序函数如下:
template<typename T>
static int merge_sort_thread(T first, T last){ // working with pointers
//sorting
}
主要思想是使用 MyThread 类,如 std::thread 和 lambda
std::thread([first, center](){
return merge_sort_thread(first, center);
});
【问题讨论】:
标签: c++ linux c++11 lambda std-function