何时使用系统调用set_tid_address?

时间:2011-08-07 19:10:20

标签: python system-calls

我一直在尝试进行系统调用,并希望了解set_tid_address的工作原理。基本上我从我所读到的是它返回执行的程序或进程的pid。

我用ls测试了这个,但是有一些命令,如正常运行时间,顶部等,我没有看到使用set_tid_address。那是为什么?

2 个答案:

答案 0 :(得分:3)

clone()系统调用可以采用CLONE_CHILD_CLEARTID标志,child_tidptr(另一个clone()参数)的值被清除,并且关联的互斥信号在唤醒时发出警报子线程退出。这用于实现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_addresslslibrt相关联,libpthread与{{1}}相关联,因此它会运行NPTL的初始化。

答案 1 :(得分:0)

根据Linux Programmer's Manual,set_tid_address用于:

  

设置指向线程ID的指针

完成后,它返回调用进程的PID。不幸的是,手册对于你何时想要使用这个系统调用很模糊。

在任何情况下,为什么您认为这些命令正在使用set_tid_address