在C中杀死pthread而不会杀死整个过程

时间:2011-07-19 17:19:26

标签: c pthreads

我使用pthreads在共享内存架构上运行并行C程序。如何在不杀死整个过程的情况下杀死一个线程?即如果一个线程首先完成,我想在退出之前等待所有其他线程。 exit(status_code)杀死了我想要的整个过程。我可能有一个障碍,等待所有线程到达障碍然后退出但是可能有更简单的方法吗?

谢谢。

4 个答案:

答案 0 :(得分:6)

在“main”(驱动程序)线程中使用pthread_join等待所有其他的终止。

要澄清上面“线程终止”的含义,请查看pthread_exit联机帮助页:

  

从主线程以外的任何线程的start函数执行返回会导致对pthread_exit()的隐式调用,使用函数的返回值作为线程的退出状态。

所以pthread_join等待联接的线程从它返回start函数或者调用pthread_exit

(你需要跟踪你创建的所有线程以使用它。如果你分离处理线程,这些都不会起作用 - 在这种情况下你可能不应该这样做。)

答案 1 :(得分:5)

您可以使用pthread_join()功能加入所有主题。

举个例子,假设您创建了5个线程,并且想要在完成所有线程后从main函数中恢复操作。

pthread_t threadId[5]; // holder for 5 thread

// Create 5 threads
for(index = 0; index < 5; index++)
    pthread_create(&(threadId[index]), NULL, producer, (void *) &(argsForProducers[index]));

// Join them
for (index = 0; index < 5; index++) 
    pthread_join(threadId[index], NULL);

答案 2 :(得分:1)

你可以调用pthread_exit()来结束你所在的线程。如果你想从另一个线程中杀死一个线程,你可以调用pthread_cancel(threadToKill)。要同步alll线程,您可以调用pthread_join()

答案 3 :(得分:0)

您希望为应用程序使用join操作来等待线程。请查看pthread man page以获得良好的概述。