gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:07 24 4
gpt4 key购买 nike

我有一个多线程应用程序,其中每个线程都有一个辅助线程来帮助第一个线程完成任务。我希望当一个线程终止时(可能调用 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,现在它与 linux 上的 exit 相同,不是您要查找的内容。同样,各种 get-pid 调用也不是您真正想要的。

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

所以像这样:

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

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

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

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

(e) primary worker 自行清理并调用 pthread_exit

这方面有很多变体,但这是基本思想。除此之外,您还会遇到诸如 pthread_cancel 之类的事情,以及如果您不是绝对需要它们(以及潜在的麻烦)您可能想要避免的领域。

关于c - 将两个或多个线程组合在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17497205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com