1

我有一个多线程应用程序,其中每个线程都有一个帮助线程来帮助第一个线程完成任务。我希望当线程终止(可能调用退出)时,辅助线程也终止。

我知道有可能使用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 */
4

1 回答 1

1

你在这里有点漂泊。忘记exit_group,这些天exit在 linux 上是一样的,这不是你要找的。同样,各种 get-pid 调用也不是您真正想要的。

处理此问题的最简单(通常也是最好的)方法是让每个主线程向其辅助线程发出信号以关闭它,然后再关闭pthread_join它 - 如果它已分离,则不发出信号。

所以像:

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

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

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

(d)pthread_join在死帮助线程上调用(或不调用)主工作线程

(e) 初级工人清理并pthread_exit自行调用。

对此有很多变化,但这是基本思想。pthread_cancel除此之外,如果您不是绝对需要它们(以及潜在的头痛),您可能会进入您可能想要避免的事情和领域。

于 2013-07-05T22:06:54.013 回答