将两个或多个线程组合在一起

时间:2013-07-05 21:40:59

标签: c linux multithreading pthreads

我有一个多线程应用程序,其中每个线程都有一个帮助线程,帮助第一个完成任务。我希望当一个线程被终止(可能是调用exit)时,helper线程也会被终止。

我知道有可能使用exit_group,但是这个系统调用会杀死调用线程的同一组中的所有线程。例如,如果我的应用程序有10个线程(因此有10个额外的帮助程序线程),我希望只有线程和辅助线程关联才能终止,而其他线程继续运行。

我的应用程序专门用于Linux。

我怎么能有这种行为?

阅读有关多线程的内容我对Linux中的线程组和进程组的概念感到有些困惑。这些术语是指同一件事吗? 确切地说,进程组(可能是线程组)是由以下调用之一检索的pid:

   pid_t getpgid(pid_t pid);
   pid_t getpgrp(void);                 /* POSIX.1 version */
   pid_t getpgrp(pid_t pid);            /* BSD version */

1 个答案:

答案 0 :(得分:1)

你在这里有点漂亮。忘记exit_group,这些日子与linux上的exit相同你想要的是什么。同样,各种get-pid调用也不是你想要的。

处理这个问题的最简单(通常是最好的)方法是让每个主要线程发出信号,让它的辅助线程关闭然后再pthread_join - 如果它已经分离,就会发出信号。

类似于:

(a)主要工作线程知道 - 但是它知道 - 它的工作已经完成。

(b)通过共享交换机或类似机制发出辅助线程信号

(c)辅助线程定期检查标志,清理并调用pthread_exit

(d)主要工作者线程在死辅助线程

上调用pthread_join(或不)

(e)小学工人清理并自行呼叫pthread_exit

有很多变化,但这是基本的想法。除此之外,你会遇到像pthread_cancel这样的事情以及你可能想要避免的事情,如果你不是绝对需要它们(以及潜在的头痛)。