gpt4 book ai didi

c - pthread_join 成功后 main() 不会终止

转载 作者:行者123 更新时间:2023-11-30 17:32:10 25 4
gpt4 key购买 nike

我有一个程序,它启动一个 pthread,然后在返回之前等待该线程的终止。代码类似于:

int main(int32_t argc, char* argv[]) {
pthread_t t;
/* initialization and other stuff
...
*/
printf("join result:%d\n", pthread_join(t, 0));
return 0;
}

程序按照预期打印:join result: 0。因此连接工作正常并且完成。t尽管如此,程序并没有停止执行。只有在 return 0 行之前插入命令 exit(0) (或其他数字),我才能强制它停止。

但是,如果我删除带有 pthread_join 调用的行,程序将完美退出。

这怎么可能?在所有子线程加入后,什么会阻止程序完成执行?

编辑:我刚刚发现 gdb 告诉我在使用 } 执行最后一行后出现段错误。尽管如此,我不知道幕后发生了什么:

Program received signal SIGSEGV, Segmentation fault.
0x000000060003aa10 in ?? ()

最佳答案

我认为主线程中可能会发生堆栈损坏。从Windows我知道,在执行main之前,exit_process函数的地址被压入堆栈。然后 return 0 执行 exit_process 调用。如果在您的情况下堆栈已损坏,则指向 exit_process 的指针可能被替换为无效指针。

关于c - pthread_join 成功后 main() 不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24328460/

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