gpt4 book ai didi

c - 第 9 次调用克隆产生段错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:05 25 4
gpt4 key购买 nike

我在使用克隆函数时遇到问题,因为它在第 9 次调用它后给我一个段错误。在我开始使用 9 个以上的线程之前,程序工作正常。

这是我对克隆的调用:

void **child_stack = (void **) malloc(SIGSTKSZ);
clone (func,
(child_stack + SIGSTKSZ),
CLONE_VM | CLONE_FILES | CLONE_PARENT_SETTID,
(void *) argsForFunc,
&pid);

我使用的是克隆,而不是任何更高级别的线程库,如 pthreads。

如果有帮助,这是我在使用 GDB 时遇到的错误:

Program received signal SIGSEGV, Segmentation fault.
clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:66
66 movq %rcx,8(%rsi)
Current language: auto; currently asm

最佳答案

here is my call to clone

不要那样做。更正指针算法后(如 Jay Conrod 所回答),您的代码将由于竞争条件而可怕地死去,因为您没有按照 glibc 期望的方式设置 TLS(线程本地存储)。

实际上,如果您使用直接 clone 调用,您将无法永远调用任何 glibc 函数(即使是您自己在另一个共享库中的函数 (1))在新的“线程”中,否则您将面临间歇性(并且极难调试)故障的风险。只需使用 pthread_create() 即可。

这是 glibc bug显示您将遇到的问题类型(请注意,这不是 glibc 问题)。

(1) 因为动态符号解析需要使用 glibc。

关于c - 第 9 次调用克隆产生段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com