我有一个并行的C程序在使用pthreads的共享内存架构上运行。如何在不杀死整个过程的情况下杀死一个线程?即如果一个线程先完成,我想在退出之前等待所有其他线程。 exit(status_code)
杀死了我不想要的全部过程。我可以有一个障碍,等待所有线程到达障碍,然后退出,但可能有一个更简单的方法?在C中杀死一个pthread而不杀死整个进程
谢谢。
我有一个并行的C程序在使用pthreads的共享内存架构上运行。如何在不杀死整个过程的情况下杀死一个线程?即如果一个线程先完成,我想在退出之前等待所有其他线程。 exit(status_code)
杀死了我不想要的全部过程。我可以有一个障碍,等待所有线程到达障碍,然后退出,但可能有一个更简单的方法?在C中杀死一个pthread而不杀死整个进程
谢谢。
在“主”(驱动程序)线程中使用pthread_join
以等待所有其他人终止。
为了澄清什么“线程终止”上述手段,看看pthread_exit
手册页说:
执行从比隐式调用主线程结果的其他任何线程的启动函数返回到了pthread_exit (),使用函数的返回值作为线程的退出状态。
所以pthread_join
等待加入线程从它要么返回启动功能或致电pthread_exit
。
(你需要保留所有线程的跟踪您创建使用此,没有这些工作,如果你分离的处理线程 - 你可能不应该在这种情况下无论如何做。)
您希望为应用程序使用join
操作以等待线程。请看pthread man page以获得良好的概述。
你可以调用pthread_exit()
来结束哟所在的线程。如果你想杀死另一个线程中的线程,你可以拨打pthread_cancel(threadToKill)
。要同步alll线程,您可以拨打pthread_join()
。
您可以使用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);