【发布时间】:2016-06-28 04:22:39
【问题描述】:
我正在尝试如何在 Linux 3.10.0-327.3.1.el7.x86_64 中为线程实现clone()
我正在运行这段代码并且偶尔会出现段错误。我知道如果我使用CLONE_THREAD 则无法检查线程是否完成,但为什么printf 会导致问题? Pthread 库如何处理这个问题?没有printfs 就没有段错误。
#define STACK_SIZE (1ULL<<22) //4MB
int tmp = 10;
int threadfunc(void *ptr)
{
printf("i'm here\n");
tmp++;
return 0;
}
int main()
{
char *child_stack = malloc(STACK_SIZE);
int child_pid = clone(&threadfunc, child_stack+(STACK_SIZE)-1, CLONE_THREAD|CLONE_SIGHAND|CLONE_VM|CLONE_FS|CLONE_FILES|SIGCHLD, NULL);
printf("my pid: %d\n", getpid());
printf("child pid: %d\n", child_pid);
printf("tmp is: %d\n", val);
return 0;
}
【问题讨论】:
-
正确使用
clone()很棘手。 99% 的时间你想要fork()或pthread_create()。
标签: c linux pthreads system-calls