成功的pthread_join后,main()不会终止

时间:2014-06-20 13:29:02

标签: c pthreads pthread-join

我有一个启动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 ?? ()

1 个答案:

答案 0 :(得分:0)

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