1
我嘗試着如何clone()
在Linux中3.10.0-327.3.1.el7.x86_64段錯誤與克隆()和printf
我運行這段代碼並具有線程執行實驗偶爾會出現段錯誤。我知道如果我使用CLONE_THREAD
,那麼無法檢查線程是否完成,但爲什麼printf
會導致問題? Pthread
庫如何處理這個問題?沒有printf
s沒有段錯誤。
#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()'而不是。 –