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