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_tidclear_child_tid という 2 つの属性を保持する。この 2 つの属性はデフォルトでは NULL である。
set_child_tid
スレッドが CLONE_CHILD_SETTID フラグを指定した clone(2) によって開始された場合、 set_child_tidclone(2) のシステムコールの ctid 引数で渡された値に設定される。
set_child_tid が設定された場合、一番最初に新しいスレッドが行うことは、 このアドレスに自身のスレッド ID を書き込むことである。
clear_child_tid
スレッドが CLONE_CHILD_CLEARTID フラグを指定した clone(2) によって開始された場合、 clear_child_tidclone(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: 03:33:33 GMT, December 05, 2022