【问题标题】:Pthreads - main thread and other threadPthreads - 主线程和其他线程
【发布时间】:2015-07-14 07:40:27
【问题描述】:

在Pthreads中,当我们在主函数内部创建多个线程时,是否所有创建的线程都成为主线程的工作线程?或者每个线程本身就是一个管理器线程?

【问题讨论】:

  • 我不确定你所说的 C 上下文中的工作线程是什么意思。你能详细说明一下吗?
  • 所有线程几乎相等。唯一的区别是,如果您退出(从)主线程,它将终止进程(所有其他线程都被终止)。除此之外,线程是您在线程中使用代码创建的。
  • 如果你创建一个线程,就会创建一个线程。它是什么“种类”的线程,取决于它在做什么。如果它确实“工作”,它就是一个工作线程。如果它响应网络消息,它就是一个网络响应线程。像“工作线程”这样的名称并没有区别,它在不同的上下文中意味着不同的东西。
  • 那么当我在 main 中创建 3 个线程时,总共会运行 4 个线程?我创建的 3 个线程 + 主线程?
  • @SuryaNarayanan 是的。唯一明显的区别是“主”线程是由操作系统进程加载程序创建的,而不是由您的代码显式创建的。

标签: c++ c pthreads


【解决方案1】:

当你创建一个线程时,如果你愿意,你可以称它为“worker”。线程不在乎人们如何看待它。不管你称它为“工人”、“经理”还是“驼鹿”,它的运行方式都是一样的。

【讨论】:

    【解决方案2】:

    当我们在主函数中创建多个线程时,所有的 创建的线程成为主线程的工作线程?

    工作线程/主线程指定是概念性的。

    没有管理所有其他工作线程的 Pthreads 指定线程。通常,主线程用于该作业。但是没有什么能阻止您选择另一个线程来管理所有线程。主线程也可以作为worker参与“工作”。

    每个线程本身就是一个管理器线程?

    线程是进程中的一个独立实体。通常,他们都相互“协调”以实现共同目标。但是您也可以拥有多组线程,每组执行不同的任务。所以不一定有一个“经理线程”。因为一个线程可以完全独立并退出(pthread_exit),而无需与其他线程进行通信(例如,每个线程排序一个单独的文件)。或者线程可以相互协调(例如矩阵乘法)。或者它们可能由一个线程“管理”(例如,主线程“馈送”队列中的其他线程,其他线程将以主/从方式处理)。

    【讨论】:

    • 注意:如果主线程退出。应用程序终止并且所有其他线程都被杀死(冷冰没有展开堆栈没有检查状态等)。您应该始终等待孩子们离开。
    猜你喜欢
    • 2012-10-12
    • 2018-03-08
    • 2016-03-28
    • 2021-05-18
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2013-08-05
    相关资源
    最近更新 更多