错误说明

set_tid_address()总是成功。

遵循规范

此系统调用是特定于Linux的。

返回值

set_tid_address()始终返回调用者的线程ID。

说明

对于每个线程,内核维护着两个属性(地址),分别称为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唤醒操作的错误将被忽略。

语法

#include <linux/unistd.h>

long set_tid_address(int *tidptr);

注意:此系统调用没有glibc包装器。请参阅注释。

名称

set_tid_address-将指针设置为线程ID

另外参见

clone(2),futex(2),gettid(2)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/

SET_TID_ADDRESS - Linux手册页

Linux程序员手册 第2部分
更新日期: 2017-09-15

备注

Glibc不为该系统调用提供包装器;使用syscall(2)调用它。

版本

从Linux 2.5.48开始存在此调用。自Linux 2.5.49起,此处给出的详细信息有效。

日期:2019-08-20 17:59:20 来源:oir作者:oir