我对所有流程退出时有点困惑:
exit(1)
- 时,我们是否退出所有进程的退出? 当其中一个线程调用return 0
- 时,我们是否退出所有进程的退出?
如果主线程调用它或其他线程,它是不同的吗?
return NULL
- 时,我们是否退出所有进程的退出?
如果主线程调用它或其他线程,它是不同的吗? 答案 0 :(得分:2)
正如已经解释的那样here,当主线程(或任何线程)调用exit或者初始化时 调用主要退货,整个流程退出。但主要的 线程可以使用pthread_exit退出,而不会影响其他线程。
是的,我们这样做。
不,我们没有。我们只从该线程返回。
从link开始,线程可以通过以下方式终止其执行:
- 通过从第一个(最外面的)过程返回,线程启动例程
- 通过调用pthread_exit(),提供退出状态
- 通过POSIX取消功能终止
void pthread_exit(void * status)用于终止a中的线程 类似于流程的exit()方式。
它与调用
return 0
相同,因为NULL定义为0.所以,相同 回答上述问题。
4b中。 *如果主线程调用它(return 0
或return NULL
)或其他线程,它是否不同?
*
是的,如果主线程调用,请参阅问题1的答案以及另一个问题 线程调用,请参阅问题3的答案。
简而言之,如果main
退出或返回,则会使整个流程退出。为了避免这种情况,可以使用pthread_exit
,等待直到最后一个线程终止。如果一个线程调用exit()
,它会使整个流程退出,如果它调用return NULL
或return 0
或pthread_exit
,则只会退出该特定线程。
答案 1 :(得分:1)
1)否(假设通过'退出'表示通过从线程的启动例程返回或调用pthread_exit退出, 不是通过调用退出功能)。 如果其他线程仍在运行,则该过程继续
2)是,如果进程中的任何线程调用exit,则整个进程终止
3)不,只有该线程终止。如果其他线程正在运行,则进程将继续。 主线程或其他线程是否调用它无关紧要。
4)与3相同