名前
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 独自である。