以下哪个指令退出所有流程?

时间:2015-07-03 06:55:18

标签: c pthreads

我对所有流程退出时有点困惑:

  1. 当主线程退出时 - 我们是否退出所有进程?
  2. 当其中一个线程调用exit(1) - 时,我们是否退出所有进程的退出?
  3. 当其中一个线程调用return 0 - 时,我们是否退出所有进程的退出?

    如果主线程调用它或其他线程,它是不同的吗?

  4. 当其中一个线程调用return NULL - 时,我们是否退出所有进程的退出? 如果主线程调用它或其他线程,它是不同的吗?

2 个答案:

答案 0 :(得分:2)

  1. 当主线程退出时 - 我们是否退出所有进程?
  2.   

    正如已经解释的那样here,当主线程(或任何线程)调用exit或者初始化时   调用主要退货,整个流程退出。但主要的   线程可以使用pthread_exit退出,而不会影响其他线程。

    1. 当其中一个线程调用exit(1)时 - 我们是否退出所有进程的退出?
    2.   

      是的,我们这样做。

      1. 当其中一个线程调用返回0时 - 我们是否退出all 处理?
      2.   

        不,我们没有。我们只从该线程返回。

             

        link开始,线程可以通过以下方式终止其执行:

             
            
        • 通过从第一个(最外面的)过程返回,线程启动例程
        •   
        • 通过调用pthread_exit(),提供退出状态
        •   
        • 通过POSIX取消功能终止
        •   
             

        void pthread_exit(void * status)用于终止a中的线程   类似于流程的exit()方式。

        1. 当其中一个线程调用返回NULL时 - 我们退出退出 从所有过程?
        2.   

          它与调用return 0相同,因为NULL定义为0.所以,相同   回答上述问题。

          4b中。 *如果主线程调用它(return 0return NULL)或其他线程,它是否不同? *

            

          是的,如果主线程调用,请参阅问题1的答案以及另一个问题   线程调用,请参阅问题3的答案。

          简而言之,如果main退出或返回,则会使整个流程退出。为了避免这种情况,可以使用pthread_exit,等待直到最后一个线程终止。如果一个线程调用exit(),它会使整个流程退出,如果它调用return NULLreturn 0pthread_exit,则只会退出该特定线程。

答案 1 :(得分:1)

1)否(假设通过'退出'表示通过从线程的启动例程返回或调用pthread_exit退出,       不是通过调用退出功能)。   如果其他线程仍在运行,则该过程继续

2)是,如果进程中的任何线程调用exit,则整个进程终止

3)不,只有该线程终止。如果其他线程正在运行,则进程将继续。    主线程或其他线程是否调用它无关紧要。

4)与3相同