SET_TID_ADDRESS
Section: Linux Programmer's Manual (2)
Updated: 2020-12-21
Index
JM Home Page
roff page
 
名前
set_tid_address - スレッド ID へのポインターを設定する
 
書式
#include <linux/unistd.h>
pid_t set_tid_address(int *tidptr);
注: このシステムコールには glibc のラッパー関数は存在しない。「注意」の節を参照。
 
説明
各スレッドについて、カーネルは set_child_tid と clear_child_tid という 2 つの属性を保持する。この 2
つの属性はデフォルトでは NULL である。
- set_child_tid
 - 
スレッドが CLONE_CHILD_SETTID フラグを指定した clone(2)  によって開始された場合、
set_child_tid は clone(2) のシステムコールの ctid 引数で渡された値に設定される。
 - 
set_child_tid が設定された場合、一番最初に新しいスレッドが行うことは、 このアドレスに自身のスレッド ID を書き込むことである。
 - clear_child_tid
 - 
スレッドが CLONE_CHILD_CLEARTID フラグを指定した clone(2) によって開始された場合、
clear_child_tid は clone(2) のシステムコールの ctid 引数で渡された値に設定される。
 
システムコール set_tid_address()  は呼び出し元スレッドの clear_child_tid の値を tidptr
に設定する。
clear_child_tid が NULL でないスレッドが終了すると、そのスレッドが他のスレッドとメモリーを共有していれば、
clear_child_tid で指定されたアドレスに 0 が書き込まれ、カーネルは以下の処理を実行する。
    futex(clear_child_tid, FUTEX_WAKE, 1, NULL, NULL, 0);
この処理の結果、このメモリーアドレスに対する futex wait を実行しているスレッドを一つ起こす (wake)。 futex wake
操作でのエラーは無視される。
 
返り値
set_tid_address()  は常に呼び出し元のスレッド ID を返す。
 
エラー
set_tid_address()  は常に成功する。
 
バージョン
この呼び出しは Linux 2.5.48 以降で存在する。 ここで書かれた詳細は Linux 2.5.49 以降で有効である。
 
準拠
このシステムコールは Linux 固有である。
 
注意
glibc はこのシステムコールに対するラッパー関数を提供していない。 syscall(2)  を使って呼び出すこと。
 
関連項目
clone(2), futex(2), gettid(2)
 
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - エラー
 - 
 - バージョン
 - 
 - 準拠
 - 
 - 注意
 - 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023