set_tid_address - スレッド ID
へのポインタを設定する
#include <linux/unistd.h>
long set_tid_address(int *tidptr);
カーネルは各プロセスについて
set_child_tid と
clear_child_tid という
2 つの値を保持する。
これらはデフォルトでは
NULL である。
set_child_tid¶
プロセスが
CLONE_CHILD_SETTID
フラグを指定した
clone(2)
によって開始された場合、
set_child_tid は
child_tidptr
に設定される。
これは
clone(2)
のシステムコールの 5
番目の引き数である。
set_child_tid
が設定された場合、一番最初に新しいプロセスが行うことは、
このアドレスに自身の
PID
を書き込むことである。
clear_child_tid¶
プロセスが
CLONE_CHILD_CLEARTID
フラグを指定した
clone(2)
によって開始された場合、
clear_child_tid は
child_tidptr
に設定される。
これは
clone(2)
のシステムコールの 5
番目の引き数である。
システムコール
set_tid_address()
は呼び出し元プロセスの
clear_child_tid の値を
tidptr
に設定する。
clear_child_tid
が設定されているときにプロセスが終了すると、
そのプロセスは他のプロセスまたはスレッドとメモリを共有しているので、
このアドレスに 0
が書き込まれ、
futex(child_tidptr, FUTEX_WAKE, 1, NULL, NULL, 0);
の呼び出しが実行される
(つまり、この futex
で待っている 1
つのプロセスを起こす
(wake))。
エラーは無視される。
返り値¶
set_tid_address()
は常に現在のプロセスの
PID を返す。
エラー¶
set_tid_address()
は常に成功する。
バージョン¶
この呼び出しは Linux 2.5.48
以降で存在する。
ここで書かれた詳細は
Linux 2.5.49
以降で有効である。
このシステムコールは
Linux 固有である。
関連項目¶
clone(2),
futex(2)
この文書について¶
この man ページは Linux
man-pages
プロジェクトのリリース
3.41 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man-pages/
に書かれている。