我有一个多线程应用程序,其中每个线程都有一个帮助线程,该线程可以帮助第一个线程完成任务。我希望当线程终止时(可能调用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
,这些天与exit
linux上的一样,这并不是您想要的。同样,各种get-pid调用也不是您想要的。
处理此问题的最简单(通常是最佳)方法是让每个主线程发出其辅助线程关闭的信号,然后关闭pthread_join
它-如果已分离则不这样做。
所以像这样:
(a)主要工作线程知道(但是知道)工作已经完成。
(b)通过共享开关或类似机制向助手线程发送信号
(c)帮助程序线程定期检查标志,清理和调用 pthread_exit
(d)pthread_join
死辅助线程上的主工作者线程调用(或不)
(e)初级工人清理并呼吁pthread_exit
自己。
对此有很多变化,但这是基本思想。除此之外,pthread_cancel
如果您不是绝对需要它们(和潜在的头痛),那么您可能想要避开诸如此类的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句