linux 何时使用系统调用set_tid_address?

irlmq6kh  于 2023-02-07  发布在  Linux
关注(0)|答案(2)|浏览(245)

我一直在尝试理解系统调用,并希望了解set_tid_address是如何工作的。基本上,从我所读到的是,它返回的程序或进程的pid是执行的。
我已经用ls测试过了,但是对于一些命令,比如uptime,top等,我没有看到set_tid_address被使用。为什么呢?

nx7onnlm

nx7onnlm1#

clone()系统调用可以接受一个CLONE_CHILD_CLEARTID标志,child_tidptr(另一个clone()参数)的值被清除,并且当子线程退出时,相关的futex发出唤醒信号。这用于实现pthread_join()(父线程等待futex)。
set_tid_address()允许在初始线程上使用pthread_join()。有关详细信息,请参阅以下LKML线程:
[patch] threading fix, tid-2.5.47-A3
[patch] user-vm-unlock-2.5.31-A2
至于为什么有些程序调用set_tid_address()而有些程序不调用,答案很简单,链接到libpthread的程序调用set_tid_address(直接或间接),ls链接到librtlibrt链接到libpthread,所以它运行NPTL的初始化。

jtw3ybtb

jtw3ybtb2#

根据Linux Programmer's Manual,set_tid_address用于:
设置指向线程ID的指针
当它完成时,它返回调用进程的PID。不幸的是,手册对您何时真正想要使用这个系统调用含糊其辞。
无论如何,您认为这些命令为什么使用set_tid_address

相关问题