2011-07-19 188 views
2

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

谢谢。

回答

6

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

为了澄清什么“线程终止”上述手段,看看pthread_exit手册页说:

执行从比隐式调用主线程结果的其他任何线程的启动函数返回到了pthread_exit (),使用函数的返回值作为线程的退出状态。

所以pthread_join等待加入线程从它要么返回启动功能或致电pthread_exit

(你需要保留所有线程的跟踪您创建使用此,没有这些工作,如果你分离的处理线程 - 你可能不应该在这种情况下无论如何做。)

0

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

1

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

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);