在查看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”字段?如果我的理解有误,请更正。
答案 0 :(得分:1)
这里的意思是tid
成员也用作标志来指示堆栈是否正在使用中。它并不涉及成员内部的任何内容。
当线程退出时,内核将tid
成员设置为零,因为使用clone
标志和CLONE_CHILD_CLEARTID
成员的地址调用了tid
系统调用被传递给它。有关详细信息,请参见sysdeps/unix/sysv/linux/createthread.c
。