我有一个程序启动一个 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完成。尽管如此,程序并没有停止执行。如果我在该行exit(0)
之前插入一个命令(或其他数字),我只能强制它停止。return 0
但是,如果我删除pthread_join
调用的行,程序将完美退出。
这怎么可能?在所有子线程加入后,什么可以阻止程序完成执行?
编辑:我刚刚发现 gdb 告诉我在执行最后一行后出现分段错误}
。尽管如此,我不知道幕后发生了什么:
Program received signal SIGSEGV, Segmentation fault.
0x000000060003aa10 in ?? ()