SET_TID_ADDRESS - Linux手册页
时间:2019-08-20 17:59:20 来源:igfitidea点击:
Linux程序员手册 第2部分
更新日期: 2017-09-15
名称
set_tid_address-将指针设置为线程ID
语法
#include <linux/unistd.h> long set_tid_address(int *tidptr);
注意:此系统调用没有glibc包装器。请参阅注释。
说明
对于每个线程,内核维护着两个属性(地址),分别称为set_child_tid和clear_child_tid。默认情况下,这两个属性包含值NULL。
- set_child_tid
- 如果使用带有CLONE_CHILD_SETTID标志的clone(2)启动线程,则set_child_tid设置为该系统调用的ctid参数中传递的值。
- 设置set_child_tid时,新线程要做的第一件事就是在该地址写入其线程ID。
- clear_child_tid
- 如果使用带有CLONE_CHILD_CLEARTID标志的clone(2)启动线程,则clear_child_tid设置为该系统调用的ctid参数中传递的值。
系统调用set_tid_address()将调用线程的clear_child_tid值设置为tidptr。
当clear_child_tid不为NULL的线程终止时,如果该线程与其他线程共享内存,则将0写入clear_child_tid中指定的地址,并且内核执行以下操作:
futex(clear_child_tid,FUTEX_WAKE,1 , NULL,NULL,0);
此操作的效果是唤醒正在执行内存位置上的futex等待的单个线程。来自futex唤醒操作的错误将被忽略。
返回值
set_tid_address()始终返回调用者的线程ID。
错误说明
set_tid_address()总是成功。
版本
从Linux 2.5.48开始存在此调用。自Linux 2.5.49起,此处给出的详细信息有效。
遵循规范
此系统调用是特定于Linux的。
备注
Glibc不为该系统调用提供包装器;使用syscall(2)调用它。
出版信息
这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/。