1PTHREADS(7) Linux Programmer's Manual PTHREADS(7)
2
3
4
6 pthreads - POSIX threads
7
9 POSIX.1 specifies a set of interfaces (functions, header files) for
10 threaded programming commonly known as POSIX threads, or Pthreads. A
11 single process can contain multiple threads, all of which are executing
12 the same program. These threads share the same global memory (data and
13 heap segments), but each thread has its own stack (automatic vari‐
14 ables).
15
16 POSIX.1 also requires that threads share a range of other attributes
17 (i.e., these attributes are process-wide rather than per-thread):
18
19 - process ID
20
21 - parent process ID
22
23 - process group ID and session ID
24
25 - controlling terminal
26
27 - user and group IDs
28
29 - open file descriptors
30
31 - record locks (see fcntl(2))
32
33 - signal dispositions
34
35 - file mode creation mask (umask(2))
36
37 - current directory (chdir(2)) and root directory (chroot(2))
38
39 - interval timers (setitimer(2)) and POSIX timers (timer_create(2))
40
41 - nice value (setpriority(2))
42
43 - resource limits (setrlimit(2))
44
45 - measurements of the consumption of CPU time (times(2)) and resources
46 (getrusage(2))
47
48 As well as the stack, POSIX.1 specifies that various other attributes
49 are distinct for each thread, including:
50
51 - thread ID (the pthread_t data type)
52
53 - signal mask (pthread_sigmask(3))
54
55 - the errno variable
56
57 - alternate signal stack (sigaltstack(2))
58
59 - real-time scheduling policy and priority (sched(7))
60
61 The following Linux-specific features are also per-thread:
62
63 - capabilities (see capabilities(7))
64
65 - CPU affinity (sched_setaffinity(2))
66
67 Pthreads function return values
68 Most pthreads functions return 0 on success, and an error number on
69 failure. Note that the pthreads functions do not set errno. For each
70 of the pthreads functions that can return an error, POSIX.1-2001 speci‐
71 fies that the function can never fail with the error EINTR.
72
73 Thread IDs
74 Each of the threads in a process has a unique thread identifier (stored
75 in the type pthread_t). This identifier is returned to the caller of
76 pthread_create(3), and a thread can obtain its own thread identifier
77 using pthread_self(3).
78
79 Thread IDs are guaranteed to be unique only within a process. (In all
80 pthreads functions that accept a thread ID as an argument, that ID by
81 definition refers to a thread in the same process as the caller.)
82
83 The system may reuse a thread ID after a terminated thread has been
84 joined, or a detached thread has terminated. POSIX says: "If an appli‐
85 cation attempts to use a thread ID whose lifetime has ended, the behav‐
86 ior is undefined."
87
88 Thread-safe functions
89 A thread-safe function is one that can be safely (i.e., it will deliver
90 the same results regardless of whether it is) called from multiple
91 threads at the same time.
92
93 POSIX.1-2001 and POSIX.1-2008 require that all functions specified in
94 the standard shall be thread-safe, except for the following functions:
95
96 asctime()
97 basename()
98 catgets()
99 crypt()
100 ctermid() if passed a non-NULL argument
101 ctime()
102 dbm_clearerr()
103 dbm_close()
104 dbm_delete()
105 dbm_error()
106 dbm_fetch()
107 dbm_firstkey()
108 dbm_nextkey()
109 dbm_open()
110 dbm_store()
111 dirname()
112 dlerror()
113 drand48()
114 ecvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
115 encrypt()
116 endgrent()
117 endpwent()
118 endutxent()
119 fcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
120 ftw()
121 gcvt() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
122 getc_unlocked()
123 getchar_unlocked()
124 getdate()
125 getenv()
126 getgrent()
127 getgrgid()
128 getgrnam()
129 gethostbyaddr() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
130 gethostbyname() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
131 gethostent()
132 getlogin()
133 getnetbyaddr()
134 getnetbyname()
135 getnetent()
136 getopt()
137 getprotobyname()
138 getprotobynumber()
139 getprotoent()
140 getpwent()
141 getpwnam()
142 getpwuid()
143 getservbyname()
144 getservbyport()
145 getservent()
146 getutxent()
147 getutxid()
148 getutxline()
149 gmtime()
150 hcreate()
151 hdestroy()
152 hsearch()
153 inet_ntoa()
154 l64a()
155 lgamma()
156 lgammaf()
157 lgammal()
158 localeconv()
159 localtime()
160 lrand48()
161 mrand48()
162 nftw()
163 nl_langinfo()
164 ptsname()
165 putc_unlocked()
166 putchar_unlocked()
167 putenv()
168 pututxline()
169 rand()
170 readdir()
171 setenv()
172 setgrent()
173 setkey()
174 setpwent()
175 setutxent()
176 strerror()
177 strsignal() [Added in POSIX.1-2008]
178 strtok()
179 system() [Added in POSIX.1-2008]
180 tmpnam() if passed a non-NULL argument
181 ttyname()
182 unsetenv()
183 wcrtomb() if its final argument is NULL
184 wcsrtombs() if its final argument is NULL
185 wcstombs()
186 wctomb()
187
188 Async-cancel-safe functions
189 An async-cancel-safe function is one that can be safely called in an
190 application where asynchronous cancelability is enabled (see
191 pthread_setcancelstate(3)).
192
193 Only the following functions are required to be async-cancel-safe by
194 POSIX.1-2001 and POSIX.1-2008:
195
196 pthread_cancel()
197 pthread_setcancelstate()
198 pthread_setcanceltype()
199
200 Cancellation points
201 POSIX.1 specifies that certain functions must, and certain other func‐
202 tions may, be cancellation points. If a thread is cancelable, its can‐
203 celability type is deferred, and a cancellation request is pending for
204 the thread, then the thread is canceled when it calls a function that
205 is a cancellation point.
206
207 The following functions are required to be cancellation points by
208 POSIX.1-2001 and/or POSIX.1-2008:
209
210 accept()
211 aio_suspend()
212 clock_nanosleep()
213 close()
214 connect()
215 creat()
216 fcntl() F_SETLKW
217 fdatasync()
218 fsync()
219 getmsg()
220 getpmsg()
221 lockf() F_LOCK
222 mq_receive()
223 mq_send()
224 mq_timedreceive()
225 mq_timedsend()
226 msgrcv()
227 msgsnd()
228 msync()
229 nanosleep()
230 open()
231 openat() [Added in POSIX.1-2008]
232 pause()
233 poll()
234 pread()
235 pselect()
236 pthread_cond_timedwait()
237 pthread_cond_wait()
238 pthread_join()
239 pthread_testcancel()
240 putmsg()
241 putpmsg()
242 pwrite()
243 read()
244 readv()
245 recv()
246 recvfrom()
247 recvmsg()
248 select()
249 sem_timedwait()
250 sem_wait()
251 send()
252 sendmsg()
253 sendto()
254 sigpause() [POSIX.1-2001 only (moves to "may" list in POSIX.1-2008)]
255 sigsuspend()
256 sigtimedwait()
257 sigwait()
258 sigwaitinfo()
259 sleep()
260 system()
261 tcdrain()
262 usleep() [POSIX.1-2001 only (function removed in POSIX.1-2008)]
263 wait()
264 waitid()
265 waitpid()
266 write()
267 writev()
268
269 The following functions may be cancellation points according to
270 POSIX.1-2001 and/or POSIX.1-2008:
271
272 access()
273 asctime()
274 asctime_r()
275 catclose()
276 catgets()
277 catopen()
278 chmod() [Added in POSIX.1-2008]
279 chown() [Added in POSIX.1-2008]
280 closedir()
281 closelog()
282 ctermid()
283 ctime()
284 ctime_r()
285 dbm_close()
286 dbm_delete()
287 dbm_fetch()
288 dbm_nextkey()
289 dbm_open()
290 dbm_store()
291 dlclose()
292 dlopen()
293 dprintf() [Added in POSIX.1-2008]
294 endgrent()
295 endhostent()
296 endnetent()
297 endprotoent()
298 endpwent()
299 endservent()
300 endutxent()
301 faccessat() [Added in POSIX.1-2008]
302 fchmod() [Added in POSIX.1-2008]
303 fchmodat() [Added in POSIX.1-2008]
304 fchown() [Added in POSIX.1-2008]
305 fchownat() [Added in POSIX.1-2008]
306 fclose()
307 fcntl() (for any value of cmd argument)
308 fflush()
309 fgetc()
310 fgetpos()
311 fgets()
312 fgetwc()
313 fgetws()
314 fmtmsg()
315 fopen()
316 fpathconf()
317 fprintf()
318 fputc()
319 fputs()
320 fputwc()
321 fputws()
322 fread()
323 freopen()
324 fscanf()
325 fseek()
326 fseeko()
327 fsetpos()
328 fstat()
329 fstatat() [Added in POSIX.1-2008]
330 ftell()
331 ftello()
332 ftw()
333 futimens() [Added in POSIX.1-2008]
334 fwprintf()
335 fwrite()
336 fwscanf()
337 getaddrinfo()
338 getc()
339 getc_unlocked()
340 getchar()
341 getchar_unlocked()
342 getcwd()
343 getdate()
344 getdelim() [Added in POSIX.1-2008]
345 getgrent()
346 getgrgid()
347 getgrgid_r()
348 getgrnam()
349 getgrnam_r()
350 gethostbyaddr() [SUSv3 only (function removed in POSIX.1-2008)]
351 gethostbyname() [SUSv3 only (function removed in POSIX.1-2008)]
352 gethostent()
353 gethostid()
354 gethostname()
355 getline() [Added in POSIX.1-2008]
356 getlogin()
357 getlogin_r()
358 getnameinfo()
359 getnetbyaddr()
360 getnetbyname()
361 getnetent()
362 getopt() (if opterr is nonzero)
363 getprotobyname()
364 getprotobynumber()
365 getprotoent()
366 getpwent()
367 getpwnam()
368 getpwnam_r()
369 getpwuid()
370 getpwuid_r()
371 gets()
372 getservbyname()
373 getservbyport()
374 getservent()
375 getutxent()
376 getutxid()
377 getutxline()
378 getwc()
379 getwchar()
380 getwd() [SUSv3 only (function removed in POSIX.1-2008)]
381 glob()
382 iconv_close()
383 iconv_open()
384 ioctl()
385 link()
386 linkat() [Added in POSIX.1-2008]
387 lio_listio() [Added in POSIX.1-2008]
388 localtime()
389 localtime_r()
390 lockf() [Added in POSIX.1-2008]
391 lseek()
392 lstat()
393 mkdir() [Added in POSIX.1-2008]
394 mkdirat() [Added in POSIX.1-2008]
395 mkdtemp() [Added in POSIX.1-2008]
396 mkfifo() [Added in POSIX.1-2008]
397 mkfifoat() [Added in POSIX.1-2008]
398 mknod() [Added in POSIX.1-2008]
399 mknodat() [Added in POSIX.1-2008]
400 mkstemp()
401 mktime()
402 nftw()
403 opendir()
404 openlog()
405 pathconf()
406 pclose()
407 perror()
408 popen()
409 posix_fadvise()
410 posix_fallocate()
411 posix_madvise()
412 posix_openpt()
413 posix_spawn()
414 posix_spawnp()
415 posix_trace_clear()
416 posix_trace_close()
417 posix_trace_create()
418 posix_trace_create_withlog()
419 posix_trace_eventtypelist_getnext_id()
420 posix_trace_eventtypelist_rewind()
421 posix_trace_flush()
422 posix_trace_get_attr()
423 posix_trace_get_filter()
424 posix_trace_get_status()
425 posix_trace_getnext_event()
426 posix_trace_open()
427 posix_trace_rewind()
428 posix_trace_set_filter()
429 posix_trace_shutdown()
430 posix_trace_timedgetnext_event()
431 posix_typed_mem_open()
432 printf()
433 psiginfo() [Added in POSIX.1-2008]
434 psignal() [Added in POSIX.1-2008]
435 pthread_rwlock_rdlock()
436 pthread_rwlock_timedrdlock()
437 pthread_rwlock_timedwrlock()
438 pthread_rwlock_wrlock()
439 putc()
440 putc_unlocked()
441 putchar()
442 putchar_unlocked()
443 puts()
444 pututxline()
445 putwc()
446 putwchar()
447 readdir()
448 readdir_r()
449 readlink() [Added in POSIX.1-2008]
450 readlinkat() [Added in POSIX.1-2008]
451 remove()
452 rename()
453 renameat() [Added in POSIX.1-2008]
454 rewind()
455 rewinddir()
456 scandir() [Added in POSIX.1-2008]
457 scanf()
458 seekdir()
459 semop()
460 setgrent()
461 sethostent()
462 setnetent()
463 setprotoent()
464 setpwent()
465 setservent()
466 setutxent()
467 sigpause() [Added in POSIX.1-2008]
468 stat()
469 strerror()
470 strerror_r()
471 strftime()
472 symlink()
473 symlinkat() [Added in POSIX.1-2008]
474 sync()
475 syslog()
476 tmpfile()
477 tmpnam()
478 ttyname()
479 ttyname_r()
480 tzset()
481 ungetc()
482 ungetwc()
483 unlink()
484 unlinkat() [Added in POSIX.1-2008]
485 utime() [Added in POSIX.1-2008]
486 utimensat() [Added in POSIX.1-2008]
487 utimes() [Added in POSIX.1-2008]
488 vdprintf() [Added in POSIX.1-2008]
489 vfprintf()
490 vfwprintf()
491 vprintf()
492 vwprintf()
493 wcsftime()
494 wordexp()
495 wprintf()
496 wscanf()
497
498 An implementation may also mark other functions not specified in the
499 standard as cancellation points. In particular, an implementation is
500 likely to mark any nonstandard function that may block as a cancella‐
501 tion point. (This includes most functions that can touch files.)
502
503 Compiling on Linux
504 On Linux, programs that use the Pthreads API should be compiled using
505 cc -pthread.
506
507 Linux implementations of POSIX threads
508 Over time, two threading implementations have been provided by the GNU
509 C library on Linux:
510
511 LinuxThreads
512 This is the original Pthreads implementation. Since glibc 2.4,
513 this implementation is no longer supported.
514
515 NPTL (Native POSIX Threads Library)
516 This is the modern Pthreads implementation. By comparison with
517 LinuxThreads, NPTL provides closer conformance to the require‐
518 ments of the POSIX.1 specification and better performance when
519 creating large numbers of threads. NPTL is available since
520 glibc 2.3.2, and requires features that are present in the Linux
521 2.6 kernel.
522
523 Both of these are so-called 1:1 implementations, meaning that each
524 thread maps to a kernel scheduling entity. Both threading implementa‐
525 tions employ the Linux clone(2) system call. In NPTL, thread synchro‐
526 nization primitives (mutexes, thread joining, and so on) are imple‐
527 mented using the Linux futex(2) system call.
528
529 LinuxThreads
530 The notable features of this implementation are the following:
531
532 - In addition to the main (initial) thread, and the threads that the
533 program creates using pthread_create(3), the implementation creates
534 a "manager" thread. This thread handles thread creation and termi‐
535 nation. (Problems can result if this thread is inadvertently
536 killed.)
537
538 - Signals are used internally by the implementation. On Linux 2.2 and
539 later, the first three real-time signals are used (see also sig‐
540 nal(7)). On older Linux kernels, SIGUSR1 and SIGUSR2 are used.
541 Applications must avoid the use of whichever set of signals is
542 employed by the implementation.
543
544 - Threads do not share process IDs. (In effect, LinuxThreads threads
545 are implemented as processes which share more information than
546 usual, but which do not share a common process ID.) LinuxThreads
547 threads (including the manager thread) are visible as separate pro‐
548 cesses using ps(1).
549
550 The LinuxThreads implementation deviates from the POSIX.1 specification
551 in a number of ways, including the following:
552
553 - Calls to getpid(2) return a different value in each thread.
554
555 - Calls to getppid(2) in threads other than the main thread return the
556 process ID of the manager thread; instead getppid(2) in these
557 threads should return the same value as getppid(2) in the main
558 thread.
559
560 - When one thread creates a new child process using fork(2), any
561 thread should be able to wait(2) on the child. However, the imple‐
562 mentation allows only the thread that created the child to wait(2)
563 on it.
564
565 - When a thread calls execve(2), all other threads are terminated (as
566 required by POSIX.1). However, the resulting process has the same
567 PID as the thread that called execve(2): it should have the same PID
568 as the main thread.
569
570 - Threads do not share user and group IDs. This can cause complica‐
571 tions with set-user-ID programs and can cause failures in Pthreads
572 functions if an application changes its credentials using seteuid(2)
573 or similar.
574
575 - Threads do not share a common session ID and process group ID.
576
577 - Threads do not share record locks created using fcntl(2).
578
579 - The information returned by times(2) and getrusage(2) is per-thread
580 rather than process-wide.
581
582 - Threads do not share semaphore undo values (see semop(2)).
583
584 - Threads do not share interval timers.
585
586 - Threads do not share a common nice value.
587
588 - POSIX.1 distinguishes the notions of signals that are directed to
589 the process as a whole and signals that are directed to individual
590 threads. According to POSIX.1, a process-directed signal (sent
591 using kill(2), for example) should be handled by a single, arbitrar‐
592 ily selected thread within the process. LinuxThreads does not sup‐
593 port the notion of process-directed signals: signals may be sent
594 only to specific threads.
595
596 - Threads have distinct alternate signal stack settings. However, a
597 new thread's alternate signal stack settings are copied from the
598 thread that created it, so that the threads initially share an
599 alternate signal stack. (A new thread should start with no alter‐
600 nate signal stack defined. If two threads handle signals on their
601 shared alternate signal stack at the same time, unpredictable pro‐
602 gram failures are likely to occur.)
603
604 NPTL
605 With NPTL, all of the threads in a process are placed in the same
606 thread group; all members of a thread group share the same PID. NPTL
607 does not employ a manager thread.
608
609 NPTL makes internal use of the first two real-time signals; these sig‐
610 nals cannot be used in applications. See nptl(7) for further details.
611
612 NPTL still has at least one nonconformance with POSIX.1:
613
614 - Threads do not share a common nice value.
615
616 Some NPTL nonconformances occur only with older kernels:
617
618 - The information returned by times(2) and getrusage(2) is per-thread
619 rather than process-wide (fixed in kernel 2.6.9).
620
621 - Threads do not share resource limits (fixed in kernel 2.6.10).
622
623 - Threads do not share interval timers (fixed in kernel 2.6.12).
624
625 - Only the main thread is permitted to start a new session using set‐
626 sid(2) (fixed in kernel 2.6.16).
627
628 - Only the main thread is permitted to make the process into a process
629 group leader using setpgid(2) (fixed in kernel 2.6.16).
630
631 - Threads have distinct alternate signal stack settings. However, a
632 new thread's alternate signal stack settings are copied from the
633 thread that created it, so that the threads initially share an
634 alternate signal stack (fixed in kernel 2.6.16).
635
636 Note the following further points about the NPTL implementation:
637
638 - If the stack size soft resource limit (see the description of
639 RLIMIT_STACK in setrlimit(2)) is set to a value other than unlim‐
640 ited, then this value defines the default stack size for new
641 threads. To be effective, this limit must be set before the program
642 is executed, perhaps using the ulimit -s shell built-in command
643 (limit stacksize in the C shell).
644
645 Determining the threading implementation
646 Since glibc 2.3.2, the getconf(1) command can be used to determine the
647 system's threading implementation, for example:
648
649 bash$ getconf GNU_LIBPTHREAD_VERSION
650 NPTL 2.3.4
651
652 With older glibc versions, a command such as the following should be
653 sufficient to determine the default threading implementation:
654
655 bash$ $( ldd /bin/ls | grep libc.so | awk '{print $3}' ) | \
656 egrep -i 'threads|nptl'
657 Native POSIX Threads Library by Ulrich Drepper et al
658
659 Selecting the threading implementation: LD_ASSUME_KERNEL
660 On systems with a glibc that supports both LinuxThreads and NPTL (i.e.,
661 glibc 2.3.x), the LD_ASSUME_KERNEL environment variable can be used to
662 override the dynamic linker's default choice of threading implementa‐
663 tion. This variable tells the dynamic linker to assume that it is run‐
664 ning on top of a particular kernel version. By specifying a kernel
665 version that does not provide the support required by NPTL, we can
666 force the use of LinuxThreads. (The most likely reason for doing this
667 is to run a (broken) application that depends on some nonconformant
668 behavior in LinuxThreads.) For example:
669
670 bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \
671 awk '{print $3}' ) | egrep -i 'threads|nptl'
672 linuxthreads-0.10 by Xavier Leroy
673
675 clone(2), fork(2), futex(2), gettid(2), proc(5), attributes(7),
676 futex(7), nptl(7), sigevent(7), signal(7)
677
678 Various Pthreads manual pages, for example: pthread_atfork(3),
679 pthread_attr_init(3), pthread_cancel(3), pthread_cleanup_push(3),
680 pthread_cond_signal(3), pthread_cond_wait(3), pthread_create(3),
681 pthread_detach(3), pthread_equal(3), pthread_exit(3),
682 pthread_key_create(3), pthread_kill(3), pthread_mutex_lock(3),
683 pthread_mutex_unlock(3), pthread_mutexattr_destroy(3),
684 pthread_mutexattr_init(3), pthread_once(3), pthread_spin_init(3),
685 pthread_spin_lock(3), pthread_rwlockattr_setkind_np(3),
686 pthread_setcancelstate(3), pthread_setcanceltype(3),
687 pthread_setspecific(3), pthread_sigmask(3), pthread_sigqueue(3), and
688 pthread_testcancel(3)
689
691 This page is part of release 5.02 of the Linux man-pages project. A
692 description of the project, information about reporting bugs, and the
693 latest version of this page, can be found at
694 https://www.kernel.org/doc/man-pages/.
695
696
697
698Linux 2019-03-06 PTHREADS(7)