如果线程共享相同的PID,则如何识别它们?

我有一个与Linux中线程实现有关的查询。

Linux没有显式线程支持。在用户空间中,我们可能使用线程库(例如NPTL)来创建线程。现在,如果我们使用NPTL,它支持1:1映射。

内核将使用该clone()函数来实现线程。

假设我创建了4个线程。那么就意味着:

  • 将会有4个task_struct

  • 在内部task_struct,将根据克隆参数提供共享资源(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)

现在我有以下查询:

  1. 4个线程是否具有相同的PID?如果有人可以详细说明,则如何共享PID。

  2. 如何识别不同的线程;有一些TID(线程ID)概念吗?


梵蒂冈之花
浏览 636回答 3
3回答

LEATH

使用PID和TGID(线程组ID)标识线程。他们还知道哪个线程是谁的父级,从本质上讲,一个进程与它启动的任何线程共享其PID。线程ID的通常是由线程库本身(如并行线程,等...)进行管理。如果启动了4个线程,则它们应该具有相同的PID。内核本身将处理线程调度等,但是该库将用于管理线程(它们是否可以运行,取决于您对线程连接和等待方法的使用)。注意:这来自我对内核2.6.36的回忆。我在当前内核版本中的工作在I / O层中,因此我不知道从那以后是否已更改。

小怪兽爱吃肉

Linux为fork()系统调用提供了复制进程的传统功能。Linux还提供了使用clone()系统调用创建线程的功能。但是,Linux不能区分进程和线程。
打开App,查看更多内容
随时随地看视频慕课网APP