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

约瑟夫·佩斯

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

我知道可以使用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 */
鸭子

您在这里有点漂泊。忘记了exit_group,这些天与exitlinux上的一样,这并不是您想要的。同样,各种get-pid调用也不是您想要的。

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

所以像这样:

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

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

(c)帮助程序线程定期检查标志,清理和调用 pthread_exit

(d)pthread_join死辅助线程上的主工作者线程调用(或不)

(e)初级工人清理并呼吁pthread_exit自己。

对此有很多变化,但这是基本思想。除此之外,pthread_cancel如果您不是绝对需要它们(和潜在的头痛),那么您可能想要避开诸如此类的问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章