1

在linux中,无论主线程如何终止,通过函数exit()或从main返回,整个进程都会在主线程终止时退出。如果主线程从 main() 返回,它将返回到名为 crt.o 或类似名称的“C 运行时”。在 crt.o 中,其 c 代码如下:exit(main(argc, argv)); exit() 最终会被主线程调用,
结果所有线程都终止了。

我的想法看起来对吗?

如果在crt.o中exit()被替换为void thread_exit(int)之类的线程终止函数,只能终止一个有退出状态的线程,crt.o的c源码好像是thread_exit(main(argc, argv)),当主线程终止时,其他线程是否仍然运行?

4

2 回答 2

6

Returning frommain相当于调用exit,并终止进程。要仅终止单个线程,请使用pthread_exit. 请注意,调用初始线程是有效的pthread_exit(并且在所有线程退出或其中一个线程调用之前,进程不会终止)并且如果您从它们的启动函数返回,exit则初始线程以外的线程会隐式调用。pthread_exit

于 2012-04-18T07:11:18.710 回答
4

在 unix 上,进程在最后一个线程终止后终止。请注意,这可以是任何线程,而不仅仅是“主”线程。因此,如果您将 exit 替换为pthread_exit,但在返回 main 之前生成了一个线程,您的进程将不会终止。

于 2012-04-18T02:28:29.140 回答