繁体   English   中英

系统调用 set_tid_address 什么时候使用?

[英]when is the system call set_tid_address used?

我一直在尝试了解系统调用,并想了解 set_tid_address 是如何工作的。 基本上从我读到的内容来看,它返回执行的程序或进程的 pid。

我已经用 ls 对此进行了测试,但是使用一些命令,例如 uptime、top 等,我没有看到正在使用 set_tid_address。 这是为什么?

clone()系统调用可以采用CLONE_CHILD_CLEARTID标志,即child_tidptr (另一个clone()参数)的值被清除,并且关联的 futex 在子线程退出时发出唤醒信号。 这用于实现pthread_join() (父线程在 futex 上等待)。

set_tid_address()允许在初始线程上pthread_join() 以下 LKML 线程中的更多信息:

[补丁] 线程修复,tid-2.5.47-A3
[补丁] user-vm-unlock-2.5.31-A2

至于为什么有些程序调用set_tid_address()而其他程序不调用,答案很简单。 链接(直接或间接)到 libpthread 的程序调用set_tid_address ls链接到librt ,后者链接到libpthread ,因此它运行 NPTL 的初始化。

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

设置指向线程 ID 的指针

当它完成时,它返回调用进程的PID。 不幸的是,手册对于您何时真正想要使用此系统调用含糊不清。

无论如何,您为什么认为这些命令使用的是set_tid_address

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM