diff options
Diffstat (limited to 'man7/pthreads.7')
-rw-r--r-- | man7/pthreads.7 | 937 |
1 files changed, 0 insertions, 937 deletions
diff --git a/man7/pthreads.7 b/man7/pthreads.7 deleted file mode 100644 index 6d4a5e3..0000000 --- a/man7/pthreads.7 +++ /dev/null @@ -1,937 +0,0 @@ -.\" Copyright (c) 2005 by Michael Kerrisk <mtk.manpages@gmail.com> -.\" -.\" SPDX-License-Identifier: Linux-man-pages-copyleft -.\" -.TH pthreads 7 2023-10-31 "Linux man-pages 6.7" -.SH NAME -pthreads \- POSIX threads -.SH DESCRIPTION -POSIX.1 specifies a set of interfaces (functions, header files) for -threaded programming commonly known as POSIX threads, or Pthreads. -A single process can contain multiple threads, -all of which are executing the same program. -These threads share the same global memory (data and heap segments), -but each thread has its own stack (automatic variables). -.P -POSIX.1 also requires that threads share a range of other attributes -(i.e., these attributes are process-wide rather than per-thread): -.IP \[bu] 3 -process ID -.IP \[bu] -parent process ID -.IP \[bu] -process group ID and session ID -.IP \[bu] -controlling terminal -.IP \[bu] -user and group IDs -.IP \[bu] -open file descriptors -.IP \[bu] -record locks (see -.BR fcntl (2)) -.IP \[bu] -signal dispositions -.IP \[bu] -file mode creation mask -.RB ( umask (2)) -.IP \[bu] -current directory -.RB ( chdir (2)) -and -root directory -.RB ( chroot (2)) -.IP \[bu] -interval timers -.RB ( setitimer (2)) -and POSIX timers -.RB ( timer_create (2)) -.IP \[bu] -nice value -.RB ( setpriority (2)) -.IP \[bu] -resource limits -.RB ( setrlimit (2)) -.IP \[bu] -measurements of the consumption of CPU time -.RB ( times (2)) -and resources -.RB ( getrusage (2)) -.P -As well as the stack, POSIX.1 specifies that various other -attributes are distinct for each thread, including: -.IP \[bu] 3 -thread ID (the -.I pthread_t -data type) -.IP \[bu] -signal mask -.RB ( pthread_sigmask (3)) -.IP \[bu] -the -.I errno -variable -.IP \[bu] -alternate signal stack -.RB ( sigaltstack (2)) -.IP \[bu] -real-time scheduling policy and priority -.RB ( sched (7)) -.P -The following Linux-specific features are also per-thread: -.IP \[bu] 3 -capabilities (see -.BR capabilities (7)) -.IP \[bu] -CPU affinity -.RB ( sched_setaffinity (2)) -.SS Pthreads function return values -Most pthreads functions return 0 on success, and an error number on failure. -The error numbers that can be returned have the same meaning as -the error numbers returned in -.I errno -by conventional system calls and C library functions. -Note that the pthreads functions do not set -.IR errno . -For each of the pthreads functions that can return an error, -POSIX.1-2001 specifies that the function can never fail with the error -.BR EINTR . -.SS Thread IDs -Each of the threads in a process has a unique thread identifier -(stored in the type -.IR pthread_t ). -This identifier is returned to the caller of -.BR pthread_create (3), -and a thread can obtain its own thread identifier using -.BR pthread_self (3). -.P -Thread IDs are guaranteed to be unique only within a process. -(In all pthreads functions that accept a thread ID as an argument, -that ID by definition refers to a thread in -the same process as the caller.) -.P -The system may reuse a thread ID after a terminated thread has been joined, -or a detached thread has terminated. -POSIX says: "If an application attempts to use a thread ID whose -lifetime has ended, the behavior is undefined." -.SS Thread-safe functions -A thread-safe function is one that can be safely -(i.e., it will deliver the same results regardless of whether it is) -called from multiple threads at the same time. -.P -POSIX.1-2001 and POSIX.1-2008 require that all functions specified -in the standard shall be thread-safe, -except for the following functions: -.P -.in +4n -.EX -asctime() -basename() -catgets() -crypt() -ctermid() if passed a non-NULL argument -ctime() -dbm_clearerr() -dbm_close() -dbm_delete() -dbm_error() -dbm_fetch() -dbm_firstkey() -dbm_nextkey() -dbm_open() -dbm_store() -dirname() -dlerror() -drand48() -ecvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)] -encrypt() -endgrent() -endpwent() -endutxent() -fcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)] -ftw() -gcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)] -getc_unlocked() -getchar_unlocked() -getdate() -getenv() -getgrent() -getgrgid() -getgrnam() -gethostbyaddr() [POSIX.1-2001 only (function removed in - POSIX.1-2008)] -gethostbyname() [POSIX.1-2001 only (function removed in - POSIX.1-2008)] -gethostent() -getlogin() -getnetbyaddr() -getnetbyname() -getnetent() -getopt() -getprotobyname() -getprotobynumber() -getprotoent() -getpwent() -getpwnam() -getpwuid() -getservbyname() -getservbyport() -getservent() -getutxent() -getutxid() -getutxline() -gmtime() -hcreate() -hdestroy() -hsearch() -inet_ntoa() -l64a() -lgamma() -lgammaf() -lgammal() -localeconv() -localtime() -lrand48() -mrand48() -nftw() -nl_langinfo() -ptsname() -putc_unlocked() -putchar_unlocked() -putenv() -pututxline() -rand() -readdir() -setenv() -setgrent() -setkey() -setpwent() -setutxent() -strerror() -strsignal() [Added in POSIX.1-2008] -strtok() -system() [Added in POSIX.1-2008] -tmpnam() if passed a non-NULL argument -ttyname() -unsetenv() -wcrtomb() if its final argument is NULL -wcsrtombs() if its final argument is NULL -wcstombs() -wctomb() -.EE -.in -.SS Async-cancel-safe functions -An async-cancel-safe function is one that can be safely called -in an application where asynchronous cancelability is enabled (see -.BR pthread_setcancelstate (3)). -.P -Only the following functions are required to be async-cancel-safe by -POSIX.1-2001 and POSIX.1-2008: -.P -.in +4n -.EX -pthread_cancel() -pthread_setcancelstate() -pthread_setcanceltype() -.EE -.in -.SS Cancelation points -POSIX.1 specifies that certain functions must, -and certain other functions may, be cancelation points. -If a thread is cancelable, its cancelability type is deferred, -and a cancelation request is pending for the thread, -then the thread is canceled when it calls a function -that is a cancelation point. -.P -The following functions are required to be cancelation points by -POSIX.1-2001 and/or POSIX.1-2008: -.P -.\" FIXME -.\" Document the list of all functions that are cancelation points in glibc -.in +4n -.EX -accept() -aio_suspend() -clock_nanosleep() -close() -connect() -creat() -fcntl() F_SETLKW -fdatasync() -fsync() -getmsg() -getpmsg() -lockf() F_LOCK -mq_receive() -mq_send() -mq_timedreceive() -mq_timedsend() -msgrcv() -msgsnd() -msync() -nanosleep() -open() -openat() [Added in POSIX.1-2008] -pause() -poll() -pread() -pselect() -pthread_cond_timedwait() -pthread_cond_wait() -pthread_join() -pthread_testcancel() -putmsg() -putpmsg() -pwrite() -read() -readv() -recv() -recvfrom() -recvmsg() -select() -sem_timedwait() -sem_wait() -send() -sendmsg() -sendto() -sigpause() [POSIX.1-2001 only (moves to "may" list in POSIX.1-2008)] -sigsuspend() -sigtimedwait() -sigwait() -sigwaitinfo() -sleep() -system() -tcdrain() -usleep() [POSIX.1-2001 only (function removed in POSIX.1-2008)] -wait() -waitid() -waitpid() -write() -writev() -.EE -.in -.P -The following functions may be cancelation points according to -POSIX.1-2001 and/or POSIX.1-2008: -.P -.in +4n -.EX -access() -asctime() -asctime_r() -catclose() -catgets() -catopen() -chmod() [Added in POSIX.1-2008] -chown() [Added in POSIX.1-2008] -closedir() -closelog() -ctermid() -ctime() -ctime_r() -dbm_close() -dbm_delete() -dbm_fetch() -dbm_nextkey() -dbm_open() -dbm_store() -dlclose() -dlopen() -dprintf() [Added in POSIX.1-2008] -endgrent() -endhostent() -endnetent() -endprotoent() -endpwent() -endservent() -endutxent() -faccessat() [Added in POSIX.1-2008] -fchmod() [Added in POSIX.1-2008] -fchmodat() [Added in POSIX.1-2008] -fchown() [Added in POSIX.1-2008] -fchownat() [Added in POSIX.1-2008] -fclose() -fcntl() (for any value of cmd argument) -fflush() -fgetc() -fgetpos() -fgets() -fgetwc() -fgetws() -fmtmsg() -fopen() -fpathconf() -fprintf() -fputc() -fputs() -fputwc() -fputws() -fread() -freopen() -fscanf() -fseek() -fseeko() -fsetpos() -fstat() -fstatat() [Added in POSIX.1-2008] -ftell() -ftello() -ftw() -futimens() [Added in POSIX.1-2008] -fwprintf() -fwrite() -fwscanf() -getaddrinfo() -getc() -getc_unlocked() -getchar() -getchar_unlocked() -getcwd() -getdate() -getdelim() [Added in POSIX.1-2008] -getgrent() -getgrgid() -getgrgid_r() -getgrnam() -getgrnam_r() -gethostbyaddr() [POSIX.1-2001 only (function removed in - POSIX.1-2008)] -gethostbyname() [POSIX.1-2001 only (function removed in - POSIX.1-2008)] -gethostent() -gethostid() -gethostname() -getline() [Added in POSIX.1-2008] -getlogin() -getlogin_r() -getnameinfo() -getnetbyaddr() -getnetbyname() -getnetent() -getopt() (if opterr is nonzero) -getprotobyname() -getprotobynumber() -getprotoent() -getpwent() -getpwnam() -getpwnam_r() -getpwuid() -getpwuid_r() -gets() -getservbyname() -getservbyport() -getservent() -getutxent() -getutxid() -getutxline() -getwc() -getwchar() -getwd() [POSIX.1-2001 only (function removed in POSIX.1-2008)] -glob() -iconv_close() -iconv_open() -ioctl() -link() -linkat() [Added in POSIX.1-2008] -lio_listio() [Added in POSIX.1-2008] -localtime() -localtime_r() -lockf() [Added in POSIX.1-2008] -lseek() -lstat() -mkdir() [Added in POSIX.1-2008] -mkdirat() [Added in POSIX.1-2008] -mkdtemp() [Added in POSIX.1-2008] -mkfifo() [Added in POSIX.1-2008] -mkfifoat() [Added in POSIX.1-2008] -mknod() [Added in POSIX.1-2008] -mknodat() [Added in POSIX.1-2008] -mkstemp() -mktime() -nftw() -opendir() -openlog() -pathconf() -pclose() -perror() -popen() -posix_fadvise() -posix_fallocate() -posix_madvise() -posix_openpt() -posix_spawn() -posix_spawnp() -posix_trace_clear() -posix_trace_close() -posix_trace_create() -posix_trace_create_withlog() -posix_trace_eventtypelist_getnext_id() -posix_trace_eventtypelist_rewind() -posix_trace_flush() -posix_trace_get_attr() -posix_trace_get_filter() -posix_trace_get_status() -posix_trace_getnext_event() -posix_trace_open() -posix_trace_rewind() -posix_trace_set_filter() -posix_trace_shutdown() -posix_trace_timedgetnext_event() -posix_typed_mem_open() -printf() -psiginfo() [Added in POSIX.1-2008] -psignal() [Added in POSIX.1-2008] -pthread_rwlock_rdlock() -pthread_rwlock_timedrdlock() -pthread_rwlock_timedwrlock() -pthread_rwlock_wrlock() -putc() -putc_unlocked() -putchar() -putchar_unlocked() -puts() -pututxline() -putwc() -putwchar() -readdir() -readdir_r() -readlink() [Added in POSIX.1-2008] -readlinkat() [Added in POSIX.1-2008] -remove() -rename() -renameat() [Added in POSIX.1-2008] -rewind() -rewinddir() -scandir() [Added in POSIX.1-2008] -scanf() -seekdir() -semop() -setgrent() -sethostent() -setnetent() -setprotoent() -setpwent() -setservent() -setutxent() -sigpause() [Added in POSIX.1-2008] -stat() -strerror() -strerror_r() -strftime() -symlink() -symlinkat() [Added in POSIX.1-2008] -sync() -syslog() -tmpfile() -tmpnam() -ttyname() -ttyname_r() -tzset() -ungetc() -ungetwc() -unlink() -unlinkat() [Added in POSIX.1-2008] -utime() [Added in POSIX.1-2008] -utimensat() [Added in POSIX.1-2008] -utimes() [Added in POSIX.1-2008] -vdprintf() [Added in POSIX.1-2008] -vfprintf() -vfwprintf() -vprintf() -vwprintf() -wcsftime() -wordexp() -wprintf() -wscanf() -.EE -.in -.P -An implementation may also mark other functions -not specified in the standard as cancelation points. -In particular, an implementation is likely to mark -any nonstandard function that may block as a cancelation point. -(This includes most functions that can touch files.) -.P -It should be noted that even if an application is not using -asynchronous cancelation, that calling a function from the above list -from an asynchronous signal handler may cause the equivalent of -asynchronous cancelation. -The underlying user code may not expect -asynchronous cancelation and the state of the user data may become -inconsistent. -Therefore signals should be used with caution when -entering a region of deferred cancelation. -.\" So, scanning "cancelation point" comments in the glibc 2.8 header -.\" files, it looks as though at least the following nonstandard -.\" functions are cancelation points: -.\" endnetgrent -.\" endspent -.\" epoll_pwait -.\" epoll_wait -.\" fcloseall -.\" fdopendir -.\" fflush_unlocked -.\" fgetc_unlocked -.\" fgetgrent -.\" fgetgrent_r -.\" fgetpwent -.\" fgetpwent_r -.\" fgets_unlocked -.\" fgetspent -.\" fgetspent_r -.\" fgetwc_unlocked -.\" fgetws_unlocked -.\" fputc_unlocked -.\" fputs_unlocked -.\" fputwc_unlocked -.\" fputws_unlocked -.\" fread_unlocked -.\" fwrite_unlocked -.\" gai_suspend -.\" getaddrinfo_a -.\" getdate_r -.\" getgrent_r -.\" getgrouplist -.\" gethostbyaddr_r -.\" gethostbyname2 -.\" gethostbyname2_r -.\" gethostbyname_r -.\" gethostent_r -.\" getnetbyaddr_r -.\" getnetbyname_r -.\" getnetent_r -.\" getnetgrent -.\" getnetgrent_r -.\" getprotobyname_r -.\" getprotobynumber_r -.\" getprotoent_r -.\" getpw -.\" getpwent_r -.\" getservbyname_r -.\" getservbyport_r -.\" getservent_r -.\" getspent -.\" getspent_r -.\" getspnam -.\" getspnam_r -.\" getutmp -.\" getutmpx -.\" getw -.\" getwc_unlocked -.\" getwchar_unlocked -.\" initgroups -.\" innetgr -.\" mkostemp -.\" mkostemp64 -.\" mkstemp64 -.\" ppoll -.\" pthread_timedjoin_np -.\" putgrent -.\" putpwent -.\" putspent -.\" putw -.\" putwc_unlocked -.\" putwchar_unlocked -.\" rcmd -.\" rcmd_af -.\" rexec -.\" rexec_af -.\" rresvport -.\" rresvport_af -.\" ruserok -.\" ruserok_af -.\" setnetgrent -.\" setspent -.\" sgetspent -.\" sgetspent_r -.\" updwtmpx -.\" utmpxname -.\" vfscanf -.\" vfwscanf -.\" vscanf -.\" vsyslog -.\" vwscanf -.SS Compiling on Linux -On Linux, programs that use the Pthreads API should be compiled using -.IR "cc \-pthread" . -.SS Linux implementations of POSIX threads -Over time, two threading implementations have been provided by -the GNU C library on Linux: -.TP -.B LinuxThreads -This is the original Pthreads implementation. -Since glibc 2.4, this implementation is no longer supported. -.TP -.BR NPTL " (Native POSIX Threads Library)" -This is the modern Pthreads implementation. -By comparison with LinuxThreads, NPTL provides closer conformance to -the requirements of the POSIX.1 specification and better performance -when creating large numbers of threads. -NPTL is available since glibc 2.3.2, -and requires features that are present in the Linux 2.6 kernel. -.P -Both of these are so-called 1:1 implementations, meaning that each -thread maps to a kernel scheduling entity. -Both threading implementations employ the Linux -.BR clone (2) -system call. -In NPTL, thread synchronization primitives (mutexes, -thread joining, and so on) are implemented using the Linux -.BR futex (2) -system call. -.SS LinuxThreads -The notable features of this implementation are the following: -.IP \[bu] 3 -In addition to the main (initial) thread, -and the threads that the program creates using -.BR pthread_create (3), -the implementation creates a "manager" thread. -This thread handles thread creation and termination. -(Problems can result if this thread is inadvertently killed.) -.IP \[bu] -Signals are used internally by the implementation. -On Linux 2.2 and later, the first three real-time signals are used -(see also -.BR signal (7)). -On older Linux kernels, -.B SIGUSR1 -and -.B SIGUSR2 -are used. -Applications must avoid the use of whichever set of signals is -employed by the implementation. -.IP \[bu] -Threads do not share process IDs. -(In effect, LinuxThreads threads are implemented as processes which share -more information than usual, but which do not share a common process ID.) -LinuxThreads threads (including the manager thread) -are visible as separate processes using -.BR ps (1). -.P -The LinuxThreads implementation deviates from the POSIX.1 -specification in a number of ways, including the following: -.IP \[bu] 3 -Calls to -.BR getpid (2) -return a different value in each thread. -.IP \[bu] -Calls to -.BR getppid (2) -in threads other than the main thread return the process ID of the -manager thread; instead -.BR getppid (2) -in these threads should return the same value as -.BR getppid (2) -in the main thread. -.IP \[bu] -When one thread creates a new child process using -.BR fork (2), -any thread should be able to -.BR wait (2) -on the child. -However, the implementation allows only the thread that -created the child to -.BR wait (2) -on it. -.IP \[bu] -When a thread calls -.BR execve (2), -all other threads are terminated (as required by POSIX.1). -However, the resulting process has the same PID as the thread that called -.BR execve (2): -it should have the same PID as the main thread. -.IP \[bu] -Threads do not share user and group IDs. -This can cause complications with set-user-ID programs and -can cause failures in Pthreads functions if an application -changes its credentials using -.BR seteuid (2) -or similar. -.IP \[bu] -Threads do not share a common session ID and process group ID. -.IP \[bu] -Threads do not share record locks created using -.BR fcntl (2). -.IP \[bu] -The information returned by -.BR times (2) -and -.BR getrusage (2) -is per-thread rather than process-wide. -.IP \[bu] -Threads do not share semaphore undo values (see -.BR semop (2)). -.IP \[bu] -Threads do not share interval timers. -.IP \[bu] -Threads do not share a common nice value. -.IP \[bu] -POSIX.1 distinguishes the notions of signals that are directed -to the process as a whole and signals that are directed to individual -threads. -According to POSIX.1, a process-directed signal (sent using -.BR kill (2), -for example) should be handled by a single, -arbitrarily selected thread within the process. -LinuxThreads does not support the notion of process-directed signals: -signals may be sent only to specific threads. -.IP \[bu] -Threads have distinct alternate signal stack settings. -However, a new thread's alternate signal stack settings -are copied from the thread that created it, so that -the threads initially share an alternate signal stack. -(A new thread should start with no alternate signal stack defined. -If two threads handle signals on their shared alternate signal -stack at the same time, unpredictable program failures are -likely to occur.) -.SS NPTL -With NPTL, all of the threads in a process are placed -in the same thread group; -all members of a thread group share the same PID. -NPTL does not employ a manager thread. -.P -NPTL makes internal use of the first two real-time signals; -these signals cannot be used in applications. -See -.BR nptl (7) -for further details. -.P -NPTL still has at least one nonconformance with POSIX.1: -.IP \[bu] 3 -Threads do not share a common nice value. -.\" FIXME . bug report filed for NPTL nice nonconformance -.\" http://bugzilla.kernel.org/show_bug.cgi?id=6258 -.\" Sep 08: there is a patch by Denys Vlasenko to address this -.\" "make setpriority POSIX compliant; introduce PRIO_THREAD extension" -.\" Monitor this to see if it makes it into mainline. -.P -Some NPTL nonconformances occur only with older kernels: -.IP \[bu] 3 -The information returned by -.BR times (2) -and -.BR getrusage (2) -is per-thread rather than process-wide (fixed in Linux 2.6.9). -.IP \[bu] -Threads do not share resource limits (fixed in Linux 2.6.10). -.IP \[bu] -Threads do not share interval timers (fixed in Linux 2.6.12). -.IP \[bu] -Only the main thread is permitted to start a new session using -.BR setsid (2) -(fixed in Linux 2.6.16). -.IP \[bu] -Only the main thread is permitted to make the process into a -process group leader using -.BR setpgid (2) -(fixed in Linux 2.6.16). -.IP \[bu] -Threads have distinct alternate signal stack settings. -However, a new thread's alternate signal stack settings -are copied from the thread that created it, so that -the threads initially share an alternate signal stack -(fixed in Linux 2.6.16). -.P -Note the following further points about the NPTL implementation: -.IP \[bu] 3 -If the stack size soft resource limit (see the description of -.B RLIMIT_STACK -in -.BR setrlimit (2)) -is set to a value other than -.IR unlimited , -then this value defines the default stack size for new threads. -To be effective, this limit must be set before the program -is executed, perhaps using the -.I ulimit \-s -shell built-in command -.RI ( "limit stacksize" -in the C shell). -.SS Determining the threading implementation -Since glibc 2.3.2, the -.BR getconf (1) -command can be used to determine -the system's threading implementation, for example: -.P -.in +4n -.EX -bash$ getconf GNU_LIBPTHREAD_VERSION -NPTL 2.3.4 -.EE -.in -.P -With older glibc versions, a command such as the following should -be sufficient to determine the default threading implementation: -.P -.in +4n -.EX -bash$ $( ldd /bin/ls | grep libc.so | awk \[aq]{print $3}\[aq] ) | \e - egrep \-i \[aq]threads|nptl\[aq] - Native POSIX Threads Library by Ulrich Drepper et al -.EE -.in -.SS Selecting the threading implementation: LD_ASSUME_KERNEL -On systems with a glibc that supports both LinuxThreads and NPTL -(i.e., glibc 2.3.\fIx\fP), the -.B LD_ASSUME_KERNEL -environment variable can be used to override -the dynamic linker's default choice of threading implementation. -This variable tells the dynamic linker to assume that it is -running on top of a particular kernel version. -By specifying a kernel version that does not -provide the support required by NPTL, we can force the use -of LinuxThreads. -(The most likely reason for doing this is to run a -(broken) application that depends on some nonconformant behavior -in LinuxThreads.) -For example: -.P -.in +4n -.EX -bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \e - awk \[aq]{print $3}\[aq] ) | egrep \-i \[aq]threads|nptl\[aq] - linuxthreads\-0.10 by Xavier Leroy -.EE -.in -.SH SEE ALSO -.ad l -.nh -.BR clone (2), -.BR fork (2), -.BR futex (2), -.BR gettid (2), -.BR proc (5), -.BR attributes (7), -.BR futex (7), -.BR nptl (7), -.BR sigevent (3type), -.BR signal (7) -.P -Various Pthreads manual pages, for example: -.BR pthread_atfork (3), -.BR pthread_attr_init (3), -.BR pthread_cancel (3), -.BR pthread_cleanup_push (3), -.BR pthread_cond_signal (3), -.BR pthread_cond_wait (3), -.BR pthread_create (3), -.BR pthread_detach (3), -.BR pthread_equal (3), -.BR pthread_exit (3), -.BR pthread_key_create (3), -.BR pthread_kill (3), -.BR pthread_mutex_lock (3), -.BR pthread_mutex_unlock (3), -.BR pthread_mutexattr_destroy (3), -.BR pthread_mutexattr_init (3), -.BR pthread_once (3), -.BR pthread_spin_init (3), -.BR pthread_spin_lock (3), -.BR pthread_rwlockattr_setkind_np (3), -.BR pthread_setcancelstate (3), -.BR pthread_setcanceltype (3), -.BR pthread_setspecific (3), -.BR pthread_sigmask (3), -.BR pthread_sigqueue (3), -and -.BR pthread_testcancel (3) |