SET_TID_ADDRESS(2)

NAME
set_tid_address - set pointer to thread ID

SYNOPSIS
#include <linux/unistd.h>

long set_tid_address(int *tidptr);

DESCRIPTION
The kernel keeps for each process two values called set_child_tid and clear_child_tid that are NULL by default.

  set_child_tid
If a process is started using clone(2) with the CLONE_CHILD_SETTID flag, set_child_tid is set to child_tidptr, the fifth parameter of that system call.

When set_child_tid is set, the very first thing the new process does is writing its PID at this address.

  clear_child_tid
If a process is started using clone(2) with the CLONE_CHILD_CLEARTID flag, clear_child_tid is set to child_tidptr, the fifth parameter of that system call.

The system call set_tid_address() sets the clear_child_tid value for the calling process to tidptr.

When clear_child_tid is set, and the process exits, and the process was sharing memory with other processes or threads, then 0 is written at this address, and a futex(child_tidptr, FUTEX_WAKE, 1, NULL, NULL, 0); call is done. (That is, wake a single process waiting on this futex.) Errors are ignored.

RETURN VALUE
set_tid_address() always returns the PID of the calling process.

VERSIONS
This call is present since Linux 2.5.48. Details as given here are valid since Linux 2.5.49.

CONFORMING TO
This system call is Linux specific.

SEE ALSO
clone(2), futex(2)