Linux内核如何在GLIBC的“ struct pthread”中的“ tid”字段中重置“ used”标志?

时间:2018-09-20 07:19:51

标签: linux linux-kernel glibc

在查看glibc代码时,在glibc_source(版本2.21)中观察到一行描述“请注意,我们不会在'tid'字段中重置'used'标志。这是由内核完成的”({{ 3}})在第760行。

根据我的理解,glibc将线程堆栈重用于缓存堆栈列表中维护的T2。但是在重用该堆栈之前,它会检查T1的线程描述符中的tid字段(在T1的pthread_join之后已经重置为-1)。

T1 - First thread.
T2 - Second thread created after T1 exited.

根据文件(allocatestack.c:760)中的注释,Linux内核重置struct pthread的'tid'字段。但是,据我了解,tid字段由pthread_join重置。

内核如何重置“ tid”字段?如果我的理解有误,请更正。

1 个答案:

答案 0 :(得分:1)

这里的意思是tid成员也用作标志来指示堆栈是否正在使用中。它并不涉及成员内部的任何内容。

当线程退出时,内核将tid成员设置为零,因为使用clone标志和CLONE_CHILD_CLEARTID成员的地址调用了tid系统调用被传递给它。有关详细信息,请参见sysdeps/unix/sysv/linux/createthread.c